В итоге вывод message: false/true/false Это нормально? Как его еще можно закрыть чтобы оно было закрыто?
Пользователь
Сообщений: Регистрация: 03.03.2016
14.02.2022 13:46:12
Код
skt_id = AllocTable()
CreateWindow(skt_id)
SetWindowPos(skt_id, 500, 0, 800, 400)
local iwc1=IsWindowClosed(skt_id)
local dt=DestroyTable(skt_id)
local iwc2=IsWindowClosed(skt_id)
message(tostring(iwc1).."/"..tostring(dt).."/"..tostring(iwc2))
Пардон, криво пример вставил
Пользователь
Сообщений: Регистрация: 03.03.2016
15.02.2022 17:11:46
Наверное я не точно сформулировал вопрос разработчикам и по этому не вижу ответа. Вопрос: Почему после закрытия пользовательской таблицы (см. пример) функцией DestroyTable(skt_id), функция IsWindowClosed(skt_id) считает что окно таблицы по прежнему открыто?
Пользователь
Сообщений: Регистрация: 05.08.2021
16.02.2022 08:15:13
Здравствуйте!
Ваше письмо получено, проблема изучается. Постараемся в ближайшее время дать ответ.
ещё кусочек кода который непонятно почему не работает
Скрытый текст
is_run = truemessage('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)
Пользователь
Сообщений: Регистрация: 05.08.2021
24.02.2022 16:22:21
Цитата
Kolossi написал: Наверное я не точно сформулировал вопрос разработчикам и по этому не вижу ответа. Вопрос: Почему после закрытия пользовательской таблицы (см. пример) функцией DestroyTable(skt_id), функция IsWindowClosed(skt_id) считает что окно таблицы по прежнему открыто?
Добрый день,
Описанная в данном обращении проблема была устранена в версии 9.4.0 терминала QUIK. Рекомендуем вам обновить версию ПО. Приносим извинения за причиненные неудобства.
Пользователь
Сообщений: Регистрация: 03.01.2022
25.02.2022 13:17:00
Цитата
Алексей написал: ещё кусочек кода который непонятно почему не работает Скрытый текст 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, проблема та же, не закрывается форточка.
Пользователь
Сообщений: Регистрация: 05.08.2021
01.03.2022 09:03:47
Здравствуйте.
На основе описанного в документации QLUA.chm можно сделать вывод, что после вызова OnStop() не гарантировано, что main() завершится до конца, поэтому в вашем случае таблица и не удаляется.
На основе этого предлагаем добавить процедуру удаления окна в тело колбека OnStop().
Пользователь
Сообщений: Регистрация: 25.09.2020
01.03.2022 09:43:54
Daniil Pozdnyakov, Потеря управления тут уже тыщу раз обсуждалась, и у меня, например, в OnStop уже и так давно сидит не какое-то несчастное убийство окна, а пересчёт портфеля, сверка портфелей, сброс дампа, работа с логом, и только после всего этого закрывается таблица по тикерам и меню, если оно открыто, когда уже пофиг, закроются они или нет. При этом предполагается, что все активные заявки будут сняты, ибо связываться ещё и с этим в OnStop есть уже полная клиника! Но вас самих разве не тошнит от этого многолетнего маразма? Выбросьте вообще OnStop к чертям собачьим, что ли, а по нажатию кнопки "Остановить" просто сбрасывайте флаг isRun и отдавайте управление в main - больше пользы будет.
Пользователь
Сообщений: Регистрация: 05.08.2021
01.03.2022 11:08:54
Владимир, здравствуйте.
На данный момент такова реализация колбека OnStop. Мы можем зарегистрировать пожелание на его модернизацию. Однако для этого нам необходимо знать, как Вы видите реализацию данной функцию. Опишите, пожалуйста.
Пользователь
Сообщений: Регистрация: 25.09.2020
01.03.2022 11:13:45
Daniil Pozdnyakov, Нет, спасибо. Со своими проблемами я справился, а регистрировать... после того, как одно из моих предложений зарегистрировали дважды, я регистрировать перестал.
На основе описанного в документации QLUA.chm можно сделать вывод, что после вызова OnStop() не гарантировано, что main() завершится до конца, поэтому в вашем случае таблица и не удаляется.
На основе этого предлагаем добавить процедуру удаления окна в тело колбека OnStop().
Самое интересное что, чтобы я не написал в конце main, ломается всё только на DestroyTable, что происходит в этой функции что main не завершается непонятно. там операции с файлами делал, всё норм, цвета и текст в таблице менял, всё работает, кроме DestroyTable.
Пользователь
Сообщений: Регистрация: 25.09.2020
03.03.2022 11:21:16
Алексей, Я поднимал этот вопрос почти сразу после своего появления здесь. Почитайте, что говорил мне АНтон по этому поводу:
Пользователь
Сообщений: Регистрация: 03.01.2022
08.03.2022 12:28:49
Прочитал всю ту ветку, проблема решается коряво, в квике непонятно на какие грабли ещё можно наступить, проблема с OnStop и работа с таблицами, озвучена давно и не решается никак. Т.е. это приводит к непредсказуемым результатам, и техподдержке всё равно что происходит. Вроде как бы почти работает, и так сойдёт их лозунг судя по всему. Печально на это всё смотреть.