<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Проблема с выводом в пользовательскую таблицу]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Проблема с выводом в пользовательскую таблицу форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 09 Apr 2026 14:19:53 +0300</pubDate>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45724/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_8lIQwHZE" href="/user/54/" bx-tooltip-user-id="54">Старатель</a> написал:<br /><br />=============<br />так точно, спасибо, &nbsp;пока и сам остановился на данном способе, я про обнуление идентификатора таблицы в OnStop<br />так даже проще, ничего проверять не нужно <br />
			<i>28.05.2020 16:00:17, e2e4.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45724/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45724/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 16:00:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45718/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Тов. из QUIK software testing <noindex><a href="https://forum.quik.ru/messages/forum10/message39365/topic4683/#message39365" target="_blank" rel="nofollow">обещал разобраться с этим</a></noindex>. И пропал. Видимо, разбирается.<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_dqRg0dOy" href="/user/14012/" bx-tooltip-user-id="14012">e2e4</a> написал:<br />сделал проверку, что если скрипт останавливается вручную, то вывода из main в таблицу не будет, а будет из OnStop и наоборот<br />=============<br />Но, если есть обращения к таблице в main внутри цикла while isRun do, тут уже сложнее.<br />Чтобы QUIK не подвисал при остановке, и скрипт корректно завершался, первым делом в OnStop удаляю идентификатор таблицы. <br />
			<i>28.05.2020 14:54:40, Старатель.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45718/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45718/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 14:54:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45686/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_TAT0GpsQ" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br /><br />=============<br />вставлять свой цикл обработки сообщений - это сложновато ещё для меня <img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp;<br />длл для вызова winapi из lua не использую, только свой длл-код по необходимости<br />мне не ясна была логика работы, на чем ожидает/подвисает, а Вы мне объяснили, спс<br />внес поправки, теперь как-бы всё устраивает <br />
			<i>28.05.2020 08:59:43, e2e4.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45686/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45686/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 08:59:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45684/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Tai5hpiG" href="/user/14012/" bx-tooltip-user-id="14012">e2e4</a> написал:<br />и наоборот.<br />=============<br />Когда наоборот, все проще, мейн закончился и колбеки больше не дергаются.<br /><br />Если находитесь в длл, придумал костылек (адоватенький), некий псевдо-луа-си<br />
====code====
<pre>function OnStop()
&nbsp;&nbsp;InsertRow
&nbsp;&nbsp;SetCell
&nbsp;&nbsp;isRun = false
&nbsp;&nbsp;for(; !isRun; )
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;for(MSG msg; PeekMessage(&#38;msg, ...); )
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage(&#38;msg);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(&#38;msg);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
end

function main()
&nbsp;&nbsp; ...
&nbsp;&nbsp; isRun = true
end
</pre>
=============
Проверять не проверял. Там еще где-то надо воткнуть WaitMessage, если isRun все еще не установлен и сообщений нет, но как-то так, чтобы не повиснуть на ней навечно. <br />
			<i>28.05.2020 08:37:25, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45684/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45684/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 08:37:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45683/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_sD4mRq4A" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br /><br />=============<br />спасибо за ответ, всё так просто и логично оказалось, теперь стало понятнее, сам бы наверное не допёр, особенно про перерисовку по WM_PAINT.<br />сделал проверку, что если скрипт останавливается вручную, то вывода из main в таблицу не будет, а будет из OnStop и наоборот. <br />
			<i>28.05.2020 08:26:49, e2e4.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45683/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45683/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 08:26:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45682/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_a5yoe0t9" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br />А мне не понятно откуда в этом коде возникает этот timeout<br />=============<br />На InsertRow после цикла встает. Если закомментировать эти две строки, не будет вставать. <br />
			<i>28.05.2020 08:20:11, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45682/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45682/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 08:20:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45680/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_QuA7rBja" href="/user/14012/" bx-tooltip-user-id="14012">e2e4</a> написал:<br />Далее окно диалога управления подвисает на 5 секунд. Откуда это время понятно, ожидание завершения потока функции main по умолчанию.<br />=============<br />А мне не понятно откуда в этом коде возникает этот timeout<br />Вроде всё должно завершиться сразу и корректно, т.к. в OnStop есть IsRun = false<br />Чисто для прикола отлогируйте значение IsRun из main() и других мест, ну мало-ли какая мистика.<br /><br />Пока похоже на косяки обработки обращения к пользовательским таблицам из main(), вроде про это были жалобы на форуме. <br />
			<i>28.05.2020 08:13:08, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45680/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45680/topic5496/</guid>
			<pubDate>Thu, 28 May 2020 08:13:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45669/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_T3QVbIyn" href="/user/14012/" bx-tooltip-user-id="14012">e2e4</a> написал:<br />Почему виснет очередь сообщений к окну таблицы при остановке скрипта?<br />=============<br />1. Вы жмете кнопку остановить.<br />2. Основной поток квика вызывает OnStop.<br />3. OnStop добавляет свою строку в таблицу (таки да, добавляет).<br />4. OnStop завершается.<br />5. Основной поток ждет завершения потока мейна пять секунд.<br />6. В это время мейн пытается добавить свою строку в таблицу, посылая под ковром сообщение основному потоку.<br />7. Но так как см. п.5, основной поток сообщений не обрабатывает. Мейн виснет навсегда.<br />8. По истечении таймаута основной поток прибивает поток мейна и продолжает обработку сообщений.<br />9. Выбрав все ценные, он ловит наконец низкоприоритетное WM_PAINT и перерисовывает таблицу (вот тут появилась строка от OnStop).<br />10. Хэппиенд.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_E1p23dlj" href="/user/14012/" bx-tooltip-user-id="14012">e2e4</a> написал:<br />Как обработать такую ситуацию, если нужен вывод в пользовательскую таблицу по завершении потока main?<br />=============<br />Не знаю. <br />
			<i>27.05.2020 23:39:47, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45669/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45669/topic5496/</guid>
			<pubDate>Wed, 27 May 2020 23:39:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Проблема с выводом в пользовательскую таблицу</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message45667/topic5496/">Проблема с выводом в пользовательскую таблицу</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть вот такой простенький код:
====code====
<pre>IsRun = true


function TableCreate()

&nbsp;&nbsp;g_tid = AllocTable()

&nbsp;&nbsp;if (g_tid ~= nil) then

&nbsp;&nbsp;&nbsp;&nbsp;SetTableNotificationCallback(g_tid, OnTableEvent)

&nbsp;&nbsp;&nbsp;&nbsp;AddColumn(g_tid, 1, "Сообщение", true, QTABLE_STRING_TYPE, 100)

&nbsp;&nbsp;&nbsp;&nbsp;if (CreateWindow(g_tid)) then

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetWindowCaption(g_tid, "Таблица")

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetWindowPos(g_tid, 0, 0, 800, 200)

&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DestroyTable(g_tid)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g_tid = nil

&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;end

end


function OnTableEvent(tid, msg, par1, par2)

&nbsp;&nbsp;PrintDbgStr("OnLogTableEvent enter")

&nbsp;&nbsp;PrintDbgStr("OnLogTableEvent leave")

end


function OnInit(script)

&nbsp;&nbsp;PrintDbgStr("OnInit enter")

&nbsp;&nbsp;TableCreate()

&nbsp;&nbsp;local row = InsertRow(g_tid, -1)
&nbsp;&nbsp;SetCell(g_tid, row, 1, "OnInit: Скрипт запущен.")

&nbsp;&nbsp;PrintDbgStr("OnInit leave")

end


function OnStop(signal)

&nbsp;&nbsp;PrintDbgStr("OnStop enter")

&nbsp;&nbsp;IsRun = false

&nbsp;&nbsp;local row = InsertRow(g_tid, -1)
&nbsp;&nbsp;SetCell(g_tid, row, 1, "OnStop: Скрипт остановлен.")

&nbsp;&nbsp;PrintDbgStr("OnStop leave")

end


function main()

&nbsp;&nbsp;PrintDbgStr("main enter")

&nbsp;&nbsp;local row = InsertRow(g_tid, -1)
&nbsp;&nbsp;SetCell(g_tid, row, 1, "main: Скрипт запущен.")

&nbsp;&nbsp;while (IsRun) do

&nbsp;&nbsp;&nbsp;&nbsp;sleep(500)

&nbsp;&nbsp;end

&nbsp;&nbsp;local row = InsertRow(g_tid, -1)
&nbsp;&nbsp;SetCell(g_tid, row, 1, "main: Скрипт остановлен.")

&nbsp;&nbsp;PrintDbgStr("main leave")

end

</pre>
=============
<p>При его запуске в отладочную консоль выводятся строки:</p><p></p>
====code====
<pre>OnInit enter
OnInit leave
main enter</pre>
=============
<p></p><p>Появляется окно с таблицей и в неё выводятся строки:</p><p></p>
====code====
<pre>OnInit: Скрипт запущен.
main: Скрипт запущен.</pre>
=============
<p>До этого момента всё работает как надо. Если же далее остановить скрипт из диалога управления, то в консоль выводятся строки:</p><p></p>
====code====
<pre>OnStop enter
OnStop leave</pre>
=============
<p>Далее окно диалога управления подвисает на 5 секунд. Откуда это время понятно, ожидание завершения потока функции main по умолчанию.</p><p>И только сейчас, по истечении этого времени в окне с таблицей появляется строка:</p>
====code====
<pre>OnStop: Скрипт остановлен.
</pre>
=============
<p></p>хотя колл-бэк функция OnStop уже давно отработала, судя по выводу в консоли.<br /> <br />Строка <B>&quot;main: Скрипт остановлен.&quot;</B> в окне с таблицей не появляется совсем, т.к. и скорее всего поток main уже принудительно завершен. Соответственно и сообщение <B>&quot;main leave&quot;</B> в консоли тоже не появляется.<br />Почему виснет очередь сообщений к окну таблицы при остановке скрипта? Как обработать такую ситуацию, если нужен вывод в пользовательскую таблицу по завершении потока main? <br />
			<i>27.05.2020 22:03:46, e2e4.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message45667/topic5496/</link>
			<guid>http://forum.quik.ru/messages/forum10/message45667/topic5496/</guid>
			<pubDate>Wed, 27 May 2020 22:03:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
