Чтобы не плодить темы, спрошу здесь.
Экспериментирую с библиотекой 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 |