<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 19 Apr 2026 00:17:42 +0300</pubDate>
		<item>
			<title>Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message79637/topic9267/">Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Разбираюсь. То что надо! Кнопку Cancel переназначил для модификации глобальной переменной и продолжения диалога. Эта глобальная переменная доступна функции process_quik_data(). Грандиозно. IUP как раз такой простенький интерфейс, какой нужен.Дополнительно открыл, что версия IUP-3.28 для Lua 5.3.5 32-бит работает с Quik 12.5.0.20, который давно уже 64 бит. <br />
			<i>03.10.2025 15:42:20, Ростислав Дм. Кудряшов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message79637/topic9267/</link>
			<guid>http://forum.quik.ru/messages/forum10/message79637/topic9267/</guid>
			<pubDate>Fri, 03 Oct 2025 15:42:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message79636/topic9267/">Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Код работает! &nbsp; Буду разбираться. <br />
			<i>03.10.2025 15:02:15, Ростислав Дм. Кудряшов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message79636/topic9267/</link>
			<guid>http://forum.quik.ru/messages/forum10/message79636/topic9267/</guid>
			<pubDate>Fri, 03 Oct 2025 15:02:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message79634/topic9267/">Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Насколько понял Вашу задачу. Задача заключается в том, чтобы использовать IUP с корутинами в Lua, чтобы интерфейс не блокировал основной поток выполнения программы, а позволял продолжать выполнение других операций в программе, пока окно IUP остаётся открытым. Возможно этот пример подойдет, нужно проверять, но разобраться поможет. Удачи.<br />
====code====
<pre>require "iuplua"

-- Указываем глобальный атрибут для работы с корутинами
iup.SetGlobal("IUPLUA_THREADED", "YES")

-- Функция для создания диалога с текстовым полем
function create_input_dialog()
&nbsp;&nbsp;&nbsp;&nbsp;local text = iup.text{expand = "HORIZONTAL", value = ""}
&nbsp;&nbsp;&nbsp;&nbsp;local ok_btn = iup.button{title = "OK", size = "50"}
&nbsp;&nbsp;&nbsp;&nbsp;local cancel_btn = iup.button{title = "Cancel", size = "50"}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;local dlg = iup.dialog{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iup.vbox{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iup.label{title = "Введите текст:"},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iup.hbox{ok_btn, cancel_btn}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title = "Ввод данных",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size = "300x100"
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return dlg, text, ok_btn, cancel_btn
end

-- Функция для асинхронного ввода через корутину
function async_input(coroutine_fn)
&nbsp;&nbsp;&nbsp;&nbsp;return function(...)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local co = coroutine.create(coroutine_fn)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local success, result = coroutine.resume(co, ...)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result
&nbsp;&nbsp;&nbsp;&nbsp;end
end

-- Основная функция диалога как корутина
function input_dialog_coroutine()
&nbsp;&nbsp;&nbsp;&nbsp;local dlg, text, ok_btn, cancel_btn = create_input_dialog()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Создаем promise-like объект для синхронизации
&nbsp;&nbsp;&nbsp;&nbsp;local result = { waiting = true, value = nil }
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Callback для OK
&nbsp;&nbsp;&nbsp;&nbsp;ok_btn.action = function()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.value = text.value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.waiting = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return iup.CLOSE
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Callback для Cancel
&nbsp;&nbsp;&nbsp;&nbsp;cancel_btn.action = function()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.value = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.waiting = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return iup.CLOSE
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Показываем диалог (не модальный!)
&nbsp;&nbsp;&nbsp;&nbsp;dlg:show()
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Ждем завершения в цикле (можно заменить на более изящное решение)
&nbsp;&nbsp;&nbsp;&nbsp;while result.waiting do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coroutine.yield()&nbsp;&nbsp;-- Отдаем управление обратно
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iup.LoopStep()&nbsp;&nbsp;&nbsp;&nbsp; -- Обрабатываем события IUP
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;dlg:destroy()
&nbsp;&nbsp;&nbsp;&nbsp;return result.value
end

-- Пример использования в основном потоке Quik
function main()
&nbsp;&nbsp;&nbsp;&nbsp;print("Начало работы скрипта")
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Запускаем диалог в корутине
&nbsp;&nbsp;&nbsp;&nbsp;local co = coroutine.create(input_dialog_coroutine)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Основной цикл обработки
&nbsp;&nbsp;&nbsp;&nbsp;local timer = os.clock()
&nbsp;&nbsp;&nbsp;&nbsp;while coroutine.status(co) ~= "dead" do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Периодически возобновляем корутину
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if os.clock() - timer &#62; 0.1 then&nbsp;&nbsp;-- каждые 100 мс
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local success, input_text = coroutine.resume(co)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if success and input_text then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Пользователь ввел: " .. input_text)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif not success then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("Ошибка в корутине:", input_text)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer = os.clock()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Здесь может выполняться другой код
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Например, обработка данных из Quik
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;process_quik_data()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- Небольшая пауза чтобы не грузить CPU
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.execute("ping -n 1 127.0.0.1 &#62; nul")&nbsp;&nbsp;-- для Windows
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- os.execute("sleep 0.1")&nbsp;&nbsp;-- для Linux
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;print("Скрипт продолжает работу после диалога")
end

function process_quik_data()
&nbsp;&nbsp;&nbsp;&nbsp;-- Здесь может быть код для работы с данными Quik
&nbsp;&nbsp;&nbsp;&nbsp;-- который выполняется параллельно с открытым диалогом
end

-- Запуск основной функции
main()
</pre>
============= <br />
			<i>03.10.2025 13:18:01, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message79634/topic9267/</link>
			<guid>http://forum.quik.ru/messages/forum10/message79634/topic9267/</guid>
			<pubDate>Fri, 03 Oct 2025 13:18:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message79633/topic9267/">Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_BNJHiC99" href="/user/111/" bx-tooltip-user-id="111">Ростислав Дм. Кудряшов</a>, Редко кто использует такой подход, посмотрите вот работу возможно она поможет Вам разобраться: &nbsp;BetterQuik - intraday trading framework; &nbsp;© 2017 Denis Kolodin; <noindex><a href="https://github.com/BetterQuik/framework" target="_blank" rel="nofollow">https://github.com/BetterQuik/framework</a></noindex>. На мой не компетентный взгляд это лучшее что есть. <br />
			<i>03.10.2025 12:53:14, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message79633/topic9267/</link>
			<guid>http://forum.quik.ru/messages/forum10/message79633/topic9267/</guid>
			<pubDate>Fri, 03 Oct 2025 12:53:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message79632/topic9267/">Как использовать Lua библиотеку визуального интерфейса IUP внутри корутин (coroutines)?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В руководстве IUP есть два упоминания слова coroutine (сопрограмма)<br /> To use IUP inside coroutines, define the global attribute «IUPLUA_THREADED».<br /> <br />Неудобство использования IUP в том, что он работает в модальном &nbsp;режиме. Т.е. вывесив окно IUP, в Lua надо ждать, пока пользователь &nbsp;закроет это окно. До этого момента получить что-либо в Lua из IUP &nbsp;невозможно.<br /> Использование корутин предполагает, что вызывающая корутину программа &nbsp;может вернуть временно себе управление, не дожидаясь завершения &nbsp;вызванной корутины. Т.е. до закрытия окна IUP, так что скрипт main() в &nbsp;Quik Lua может выполняться с учётом параллельных манипуляций &nbsp;пользователя в окне IUP.<br /> <br /> Однако не удаётся найти примеры такого использования корутин с IUP.<br /> Кто-нибудь может чего-то добавить? <br />
			<i>03.10.2025 12:34:58, Ростислав Дм. Кудряшов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message79632/topic9267/</link>
			<guid>http://forum.quik.ru/messages/forum10/message79632/topic9267/</guid>
			<pubDate>Fri, 03 Oct 2025 12:34:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
