e2e4 (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Глюк в программе Quik после обновления, Нужна помощь
 
Собственно, обновилась программа у сберброкера (сама попросила, стала версия 9.7.1.10 ).
Теперь, если в любой таблице "Текущие торги" сменить инструмент (кликнуть мышкой по невыбранной строке или сменить ее стрелкой на клавиатуре), то главное окно Quik'a становится неактивным, пропадает клавиатурный фокус.
Т.е. теряется возможность перебирать позиции в таблице "Текущие торги" с помощью клавиатуры, нужно каждый раз возвращать фокус на главное окно.
В других таблицах Quik'a такого нет.
Может уже было такое у кого, как исправить, ждать год нового обновления или откатывать к старой версии?
Подскажите по ошибке в коде
 
На днях обновился QUIK у сбера и вылезла ошибка "attempt to call a nil value (global 'loadstring')" вот в такой строчке кода:

local func, err = loadstring("return ".."{["x"]=0,["y"]=0}")

Подскажите, пожалуйста, что тут поменялось и как исправить?
Проблема с выводом в пользовательскую таблицу
 
Есть вот такой простенький код:
Код
IsRun = true


function TableCreate()

  g_tid = AllocTable()

  if (g_tid ~= nil) then

    SetTableNotificationCallback(g_tid, OnTableEvent)

    AddColumn(g_tid, 1, "Сообщение", true, QTABLE_STRING_TYPE, 100)

    if (CreateWindow(g_tid)) then

      SetWindowCaption(g_tid, "Таблица")

      SetWindowPos(g_tid, 0, 0, 800, 200)

    else

      DestroyTable(g_tid)

      g_tid = nil

    end

  end

end


function OnTableEvent(tid, msg, par1, par2)

  PrintDbgStr("OnLogTableEvent enter")

  PrintDbgStr("OnLogTableEvent leave")

end


function OnInit(script)

  PrintDbgStr("OnInit enter")

  TableCreate()

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "OnInit: Скрипт запущен.")

  PrintDbgStr("OnInit leave")

end


function OnStop(signal)

  PrintDbgStr("OnStop enter")

  IsRun = false

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "OnStop: Скрипт остановлен.")

  PrintDbgStr("OnStop leave")

end


function main()

  PrintDbgStr("main enter")

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "main: Скрипт запущен.")

  while (IsRun) do

    sleep(500)

  end

  local row = InsertRow(g_tid, -1)
  SetCell(g_tid, row, 1, "main: Скрипт остановлен.")

  PrintDbgStr("main leave")

end

При его запуске в отладочную консоль выводятся строки:

Код
OnInit enter
OnInit leave
main enter

Появляется окно с таблицей и в неё выводятся строки:

Код
OnInit: Скрипт запущен.
main: Скрипт запущен.

До этого момента всё работает как надо. Если же далее остановить скрипт из диалога управления, то в консоль выводятся строки:

Код
OnStop enter
OnStop leave

Далее окно диалога управления подвисает на 5 секунд. Откуда это время понятно, ожидание завершения потока функции main по умолчанию.

И только сейчас, по истечении этого времени в окне с таблицей появляется строка:

Код
OnStop: Скрипт остановлен.

хотя колл-бэк функция OnStop уже давно отработала, судя по выводу в консоли.

Строка "main: Скрипт остановлен." в окне с таблицей не появляется совсем, т.к. и скорее всего поток main уже принудительно завершен. Соответственно и сообщение "main leave" в консоли тоже не появляется.
Почему виснет очередь сообщений к окну таблицы при остановке скрипта? Как обработать такую ситуацию, если нужен вывод в пользовательскую таблицу по завершении потока main?
Страницы: 1
Наверх