Наверное я не точно сформулировал вопрос разработчикам и по этому не вижу ответа. Вопрос: Почему после закрытия пользовательской таблицы (см. пример) функцией DestroyTable(skt_id), функция IsWindowClosed(skt_id) считает что окно таблицы по прежнему открыто?
Kolossi написал: Наверное я не точно сформулировал вопрос разработчикам и по этому не вижу ответа. Вопрос: Почему после закрытия пользовательской таблицы (см. пример) функцией DestroyTable(skt_id), функция IsWindowClosed(skt_id) считает что окно таблицы по прежнему открыто?
Добрый день,
Описанная в данном обращении проблема была устранена в версии 9.4.0 терминала QUIK. Рекомендуем вам обновить версию ПО. Приносим извинения за причиненные неудобства.
Алексей написал: ещё кусочек кода который непонятно почему не работает Скрытый текст is_run = true message('start is_run = ' .. tostring(is_run),1) function main() skt_id = AllocTable() CreateWindow(skt_id) SetWindowPos(skt_id, 500, 0, 800, 400) message('main start is_run = ' .. tostring(is_run),1) while is_run do sleep(100) end message('main end1 is_run = ' .. tostring(is_run),1) DestroyTable(skt_id) message('main end2 is_run = ' .. tostring(is_run),1) end
function OnStop() is_run = false return 200 end message('main end2 is_run = ' .. tostring(is_run),1) эта строчка уже не исполняется, всё ломает DestroyTable(skt_id)
проверил код на новой версии 9,4,0,130, проблема та же, не закрывается форточка.
На основе описанного в документации QLUA.chm можно сделать вывод, что после вызова OnStop() не гарантировано, что main() завершится до конца, поэтому в вашем случае таблица и не удаляется.
На основе этого предлагаем добавить процедуру удаления окна в тело колбека OnStop().
Daniil Pozdnyakov, Потеря управления тут уже тыщу раз обсуждалась, и у меня, например, в OnStop уже и так давно сидит не какое-то несчастное убийство окна, а пересчёт портфеля, сверка портфелей, сброс дампа, работа с логом, и только после всего этого закрывается таблица по тикерам и меню, если оно открыто, когда уже пофиг, закроются они или нет. При этом предполагается, что все активные заявки будут сняты, ибо связываться ещё и с этим в OnStop есть уже полная клиника! Но вас самих разве не тошнит от этого многолетнего маразма? Выбросьте вообще OnStop к чертям собачьим, что ли, а по нажатию кнопки "Остановить" просто сбрасывайте флаг isRun и отдавайте управление в main - больше пользы будет.
На данный момент такова реализация колбека OnStop. Мы можем зарегистрировать пожелание на его модернизацию. Однако для этого нам необходимо знать, как Вы видите реализацию данной функцию. Опишите, пожалуйста.
Daniil Pozdnyakov, Нет, спасибо. Со своими проблемами я справился, а регистрировать... после того, как одно из моих предложений зарегистрировали дважды, я регистрировать перестал.
На основе описанного в документации QLUA.chm можно сделать вывод, что после вызова OnStop() не гарантировано, что main() завершится до конца, поэтому в вашем случае таблица и не удаляется.
На основе этого предлагаем добавить процедуру удаления окна в тело колбека OnStop().
Самое интересное что, чтобы я не написал в конце main, ломается всё только на DestroyTable, что происходит в этой функции что main не завершается непонятно. там операции с файлами делал, всё норм, цвета и текст в таблице менял, всё работает, кроме DestroyTable.
Прочитал всю ту ветку, проблема решается коряво, в квике непонятно на какие грабли ещё можно наступить, проблема с OnStop и работа с таблицами, озвучена давно и не решается никак. Т.е. это приводит к непредсказуемым результатам, и техподдержке всё равно что происходит. Вроде как бы почти работает, и так сойдёт их лозунг судя по всему. Печально на это всё смотреть.