Чтобы не плодить темы, спрошу здесь.
Экспериментирую с библиотекой iup, чтобы понять, что можно, а что нельзя делать в qlua-скриптах с этой библиотекой. Обычные окна с элементами внутри них выводятся без проблем. Проблемы начинаются при показе модальных окон и popup-меню. Пока их не закроешь, поток main дальше не выполняется (видно по необновляющемуся заголовку окна и прерыванию записи в файл log.txt). Пример скрипта приведён в конце сообщения.
Вопрос
к разработчикам QUIK и тем, кто
смог решить подобные проблемы:
можно ли добиться продолжения работы потока main и как это сделать?
В других языках программирования я бы выделил для uip отдельный вычислительный поток. Можно ли что-то подобное сделать в рамках QUIK?
Код |
---|
require("util.luapaths") -- мой код для задания package.cpath для подключения библиотек lua из дистрибутива LuaForWindows
require("iuplua")
local iup = iup
local interrupted = false
function OnStop()
interrupted = true
end
function main()
local btn1 = iup.button { title = "Show Dialog", }
function btn1:action()
local r = iup.Alarm("", "Main Title doesn't update!", "Exit")
if r == 1 then
interrupted = true
end
end
local btn2 = iup.button { title = "Show menu", }
function btn2:action()
local item = iup.item { title = "Exit", }
function item:action()
interrupted = true
end
local menu = iup.menu {
iup.item { title = "Dialog title doesn't update!", active = "NO", },
item
}:popup(iup.MOUSEPOS, iup.MOUSEPOS)
end
local dlg = iup.dialog {
iup.vbox { btn1, btn2 };
size = "EIGHTHxEIGHTH",
}
function dlg:close_cb()
interrupted = true
end
dlg:show()
local file = io.open("log.txt", "w+")
if file then
while not interrupted do
iup.LoopStep()
dlg.title = os.time()
file:write(os.time(), "\n")
file:flush()
sleep(100)
end
file:close()
end
dlg:destroy()
iup.Close()
end |