Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Октября 07, 2024, 06:14:52 pm
Начало Помощь Поиск Войти Регистрация
Новости:

Transaq  |  СБО "Transaq"  |  TRANSAQ Connector  |  Topic: Корректное завершение работы « предыдущая тема следующая тема »
Страниц: [1] 2 Печать
Автор Тема: Корректное завершение работы  (Прочитано 15754 раз)
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« : Декабря 23, 2013, 12:03:00 am »

Когда нужно делать выгрузку библиотеки? Дело в том, что в колбэке этого делать нельзя, так как библиотека еще используется. И сразу после отправки команды Disconnect так же делать нельзя, так как не известно когда придет ответ.
Записан
klimov
Разработчики
Hero Member
*****
Сообщений: 815


Просмотр профиля Email
« Ответ #1 : Декабря 23, 2013, 10:19:34 am »

Команда disconnect является синхронной, т.е.  при ее выполнении SendCommand вернет результат только после того, как коннектор отключится от сервера.
Так что можно после выхода из SendCommand позвать UnInitialize, а потом выгрузить библиотеку.
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #2 : Декабря 23, 2013, 06:23:41 pm »

Следующей строчкой после SendCommand вы имеет следующую ситуацию. 2 потока. Основной поток стоит на позиции после SendMessage. Второй поток стоит в Callback от этой самой команды. UnInitialize проходит без ошибки. На FreeLibrary  появляется AccessViolation.
Записан
klimov
Разработчики
Hero Member
*****
Сообщений: 815


Просмотр профиля Email
« Ответ #3 : Декабря 24, 2013, 10:01:44 am »

Да, согласен.

Можно после выполнения команды Disconnect сделать небольшой sleep (заведомо больше по времени, чем обработка <server_status> connected=false  в коллбэк-функции)
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #4 : Декабря 25, 2013, 11:15:32 am »

Можно после выполнения команды Disconnect сделать небольшой sleep (заведомо больше по времени, чем обработка <server_status> connected=false  в коллбэк-функции)

Не помогает (10 сек ждал, колбэк гарантированно отработал судя по логу). Что логично, так как в процессе остались 2 потока, которые создаются при коннекте.

Я уже писал вам через Финам, что нужно убрать все эти потоки, и дать возможность пользовательскому коду организовывать взаимодействие. Заодно напишу, еще и то, чтобы как-то выключать механизм переподключений, который судя по всему живет свой жизнью. При слабом интернете этот механизм начинает глючить. При этом ручное подключение работает лучше, так как пользователь сам может определить, через сколько примерно времени инет снова отвалиться (кто пользуется плохим интернетом тот знает, что там бывает как-бы периоды стабильного подключения, так и отвала).

Может быть дать возможность как-то выключать все эти чудесные механизмы? Через настройки там какие-нибудь?
Записан
klimov
Разработчики
Hero Member
*****
Сообщений: 815


Просмотр профиля Email
« Ответ #5 : Декабря 25, 2013, 01:28:16 pm »

Какую версию коннектора вы используете?

Пришлите на support@transaq.ru все логи Коннектора, чтобы мы могли посмотреть на глюки механизма переподключений

В момент AccessViolation при вызове FreeLibrary, возможно создался отладочный файл (он имеет расширение mdmp) Если  он есть, то прошу его также прислать.
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #6 : Декабря 25, 2013, 03:17:01 pm »

Файла такого нет. Последние строчки лога XDF

131225-151232.287 5752   [2728]   Inf << <server_status id="2" connected="true"/>
131225-151329.288 5752   [3384]   Inf >> <command id="disconnect" />
131225-151329.816 5752   [2728]   Inf << <server_status id="2" connected="false"/>
131225-151329.817 5752   [3384]   Inf << <result success="true"/>
131225-151345.237 5752   [3384]   Sys >< UnInitialize requested...

Версия файла 5.8.2.4

Логи переподключения нужно ждать, когда интернет будет нестабильным. Просьба сделать параметры, которыми можно было бы выключить все эти самодостаточноые механизмы.
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #7 : Декабря 30, 2013, 09:23:56 am »

И все же. Возможно ли хоть как-то выключать коннектор или коннектор невозможно выключить?
Записан
Сорвачев Сергей
Разработчики
Newbie
*****
Сообщений: 49


Просмотр профиля Email
« Ответ #8 : Января 14, 2014, 02:22:29 pm »

Следующей строчкой после SendCommand вы имеет следующую ситуацию. 2 потока. Основной поток стоит на позиции после SendMessage. Второй поток стоит в Callback от этой самой команды. UnInitialize проходит без ошибки. На FreeLibrary  появляется AccessViolation.

Добрый день, Михаил.
А можно поподробнее о Вашем проекте:
реализация у Вас на с++?
2 потока, о которых Вы пишете, это реализация Вашего проекта?
Можете привести примерный сценарий взаимодействия с библиотекой коннектора (с перечислением управляющих функций, т.е. Initialize, SendCommand(connect/disconnect), Load/FreeLibrary).

Необходимость остановки коннектора на уровне выгрузки библиотеки в процессе работы программы чем вызвана? Или указанная проблема возникает в момент завершения  Вашей программы?
Если есть возможность, можете написать небольшой тест библиотеки, который воспроизводит проблему у Вас и прислать его на support@transaq.ru?
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #9 : Января 14, 2014, 05:14:14 pm »

2 потока, о которых Вы пишете, это реализация Вашего проекта?

Один поток - это основной поток. Если говорить про Windows, то каждое приложение имеет минимум один поток. Второй поток - это поток колбэка. Я его не создавал. Видимо создался сам ТКоннектором. Если вы умеете пользоваться Vusual Studio, то там можно посмотреть в окно Threads.

Необходимость остановки коннектора на уровне выгрузки библиотеки в процессе работы программы чем вызвана?

Вроде как это сценарий корректного завершения работы с ТКоннектором. Описан в документации. Если сценарий неправильный, то просьба хотя бы сюда написать, какой правильный.

Если есть возможность, можете написать небольшой тест библиотеки, который воспроизводит проблему у Вас и прислать его на support@transaq.ru?

Ребят, давайте что-ли на реалии смотреть чуть трезвее. Я вам написал баг репорт. Баг репорт подтвержден Климовым. Механизмы авто переподключения о которых я писал, так же описаны в вашей документации (хотя там написано про Финам, не знаю кто ее писал, думаю сами между собой разберетесь). Писать примеры я не буду, так как лично для себя не вижу смысла, да и в лом =) Хотите - правьте багу. Хотите - нет. Я для очистки совести вам написал об их сущенствовании. Считаю свою часть работы выполненной на 100% =)
Записан
klimov
Разработчики
Hero Member
*****
Сообщений: 815


Просмотр профиля Email
« Ответ #10 : Января 15, 2014, 12:44:16 pm »

Михаил,
на данный момент достаточно много внешних разработчиков используют Коннектор, но о подобных проблемах сообщений нам не поступало. Возможно, есть какой-то нюанс в том, как именно в вашей программе организовано взаимодействие с библиотекой. Именно поэтому Сергей задает эти вопросы.

В любом случае, мы еще раз проверим корректность работы библиотеки при UnInitialize и последующем FreeLibrary. О результатах сообщим
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #11 : Января 16, 2014, 07:31:33 pm »

В любом случае, мы еще раз проверим корректность работы библиотеки при UnInitialize и последующем FreeLibrary. О результатах сообщим

Что-то мы ходим вокруг да около. Я вам описал причину крэша еще 23 декабря в этом топике. 24 декабря вы поняли, о чем я пишу. А теперь все с начала, новый год? =)

Нельзя выгружать библиотеку если в ней есть работающий код. Это и приводит к крэшу. Проблема в том, что ТКоннектор невозможно остановить. Там живут свои потоки, свой контроль за подключением. Я задал вопрос 25 декабря, как все это выключить. Как сделать так, чтобы ТКоннектор ничего параллельно не делал в фоне. Ответив на этот вопрос вы ответите и на причину того, почему ТКоннектор невозможно выключить.

Я даже больше того скажу. Из-за того, что SendCommand является блокирующим методом, сейчас в легкую из-за этой параллельности может возникнуть ситуация, когда сначала придет оповещение о заявки через поток данных, а затем вернется результат из SendCommand. И информация о заявке будет потеряна.

Посмотрите на то, как сделали в Plaza 2. Никаких скрытых потоков. Пользовательский код сам создает сколько нужно потоков и сам выбирает данные из очереди. Тогда проблема race condition уйдет сама.

Фразы вида "много внешних разработчиков" - это ни о чем. Я вам пишу про явные проблемы. Достаточно взглянуть на документацию, подумать как это работает, и все очевидно станет. Какие заплатки делают другие разработчики я не знаю. Но я вам предлагаю убрать подход с заплатками и сделать коннектор нормальным. Чтобы его логика работы было детерминированной. Я вам ранее уже писал о проблеме http://www.transaq.ru/forum/index.php?topic=1258.0 после чего вы изменили ТКоннектор (неправильно, конечно, сделали, но хоть так, иначе с ММВБ было вообще не возможно работать). Предлагаю и в этот раз сделать фикс. Только вначале скажите, как вы хотите его сделать. Чтобы не было как с кодами площадок.
« Последнее редактирование: Января 16, 2014, 07:42:25 pm от Mikhail Sukhov » Записан
klimov
Разработчики
Hero Member
*****
Сообщений: 815


Просмотр профиля Email
« Ответ #12 : Января 28, 2014, 04:21:40 pm »

Михаил, спасибо за настойчивость

Доработали UnInitialize , теперь dll должна выгружаться нормально

Кстати, чтобы отключить авто-переподключение можно в команде "connect" задавать значение session_timeout меньше, чем значение request_timeout
Записан
Mikhail Sukhov
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #13 : Февраля 17, 2014, 07:46:16 pm »

Хочу ответить, что до сих пор не работает. После того как вы отписали, еще 2 раза мне через личку давали 2 неработающие версии.
Записан
Sid
Newbie
*
Сообщений: 15


Просмотр профиля Email
« Ответ #14 : Февраля 27, 2014, 02:21:56 pm »

Михаил, чем закончилась эта история ?
Получается что при работе с транзак-коннектором совместно с S#-библиотекой могут быть проблемы.
Записан
Страниц: [1] 2 Печать 
Transaq  |  СБО "Transaq"  |  TRANSAQ Connector  |  Topic: Корректное завершение работы « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!