<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Работа функций OnStop() и SetCell()]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Работа функций OnStop() и SetCell() форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 11:55:31 +0300</pubDate>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57162/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_vDzeseSK" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a>, Да только я уже и указывал, и ссылку давал по чуть ли не дословно заданному такому же запросу. Надоело! <br />
			<i>11.08.2021 20:41:38, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57162/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57162/topic6563/</guid>
			<pubDate>Wed, 11 Aug 2021 20:41:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57159/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_FiDjOhaZ" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a>, добрый день!<br /><br />В таком случае, просьба указать, где именно <br />====quote====<br /><a class="blog-p-user-name" id="bp_wP3MTDSk" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br />подробно говорилось, какие нельзя и почему.<br />=============<br /> <br />
			<i>11.08.2021 18:44:43, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57159/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57159/topic6563/</guid>
			<pubDate>Wed, 11 Aug 2021 18:44:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57154/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_j8T2Kow4" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a>, Этот вопрос уже ставился, и подробно говорилось, какие нельзя и почему. <br />
			<i>11.08.2021 16:45:46, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57154/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57154/topic6563/</guid>
			<pubDate>Wed, 11 Aug 2021 16:45:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57152/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_b2GoZeJZ" href="/user/82/" bx-tooltip-user-id="82">swerg</a>, <br /><br />Давайте поставим вопрос иначе.<br />Какие функции, по Вашему, нельзя вызывать из OnStop() и почему Вы так решили? <br />
			<i>11.08.2021 15:58:31, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57152/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57152/topic6563/</guid>
			<pubDate>Wed, 11 Aug 2021 15:58:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57099/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Bow88FJF" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br /><noindex><a href="/user/82/" target="_blank" rel="nofollow">swerg</a></noindex>, добрый день!<br /><br /> <br />====quote====<br /><noindex><a href="/user/82/" target="_blank" rel="nofollow">swerg</a></noindex> написал:<br />1. В документацию включить список функций, которые нельзя вызывать из OnStop() по каким-либо причинам, как нарушающие корректность выполнения программ Lua или работу терминала.<br />2. После этого у вас будет список функций с ограничением по функционалу. Очевидно, далее следует работать над уменьшением размера этого списка, т.е. надо добавлением возможности всё же вызывать функции из этого списка из OnStop() (c постепенным удалением таковых функций из данного неприятного списка).<br />=============<br />Просьба уточнить, о каких конкретно функциях, вызываемых из OnStop(), идет речь?<br />Быть может, мы не так поняли, но речь вроде бы шла про блокировку основного потока функцией OnStop() (как и описано в документации).<br />=============<br /><br />Речь о функциях, которые нельзя вызывать из OnStop. <br />
			<i>10.08.2021 06:09:24, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57099/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57099/topic6563/</guid>
			<pubDate>Tue, 10 Aug 2021 06:09:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57098/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_4ObO929P" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br />Просьба уточнить, о каких конкретно функциях, вызываемых из OnStop(), идет речь?<br />=============<br /> &nbsp; Цитата (не точная) из известной юморески: "Принесите справки от всех женщин, что вы на них не женаты." &nbsp;<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" /> <br />
			<i>09.08.2021 21:51:20, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57098/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57098/topic6563/</guid>
			<pubDate>Mon, 09 Aug 2021 21:51:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message57096/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_K0PPGPhP" href="/user/82/" bx-tooltip-user-id="82">swerg</a>, добрый день!<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_zohEnHp8" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br />1. В документацию включить список функций, которые нельзя вызывать из OnStop() по каким-либо причинам, как нарушающие корректность выполнения программ Lua или работу терминала.<br />2. После этого у вас будет список функций с ограничением по функционалу. Очевидно, далее следует работать над уменьшением размера этого списка, т.е. надо добавлением возможности всё же вызывать функции из этого списка из OnStop() (c постепенным удалением таковых функций из данного неприятного списка).<br />=============<br />Просьба уточнить, о каких конкретно функциях, вызываемых из OnStop(), идет речь?<br />Быть может, мы не так поняли, но речь вроде бы шла про блокировку основного потока функцией OnStop() (как и описано в документации). <br />
			<i>09.08.2021 19:18:32, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message57096/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message57096/topic6563/</guid>
			<pubDate>Mon, 09 Aug 2021 19:18:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56809/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вариант решения выше озвученных пожеланий:<br />1)	поток, обслуживающий колбеки событий фондового рынка, занимается только ими (и ни чем другим); <br />2)	добавляется отдельный поток запуска/завершения скриптов и обслуживания таблиц QUIK;<br />3)	для защиты потоков от возможной, взаимной блокировки кодами на «чистом» Lua, реализуется решение (состоящее из конкретных правок в 4-х местах исходного текста QLua), которое было приведено в комментарии <noindex><a href="https://forum.quik.ru/messages/forum10/message56351/topic6356/#message56351" target="_blank" rel="nofollow">https://forum.quik.ru/messages/forum10/message56351/topic6356/#message56351</a></noindex> <br />В чем проблемы реализации такого варианта? <br />В своей системе реализации многопоточных скриптов OS_Quesha я запускаю столько потоков, сколько мне требуется и они работают нормально. <br />
			<i>26.07.2021 22:53:45, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56809/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56809/topic6563/</guid>
			<pubDate>Mon, 26 Jul 2021 22:53:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56804/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_30Sm9ZPz" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br />Как уже было сказано ранее, такова реализация работы OnStop() на текущий момент, это не является ошибкой.<br />=============<br /><br />Ограничения, не указанные в документации - есть ошибка.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_l0gIyF2B" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a> написал:<br />Просьба более подробно описать, как Вы хотели бы видеть логику работы функции в данном месте. Готовы зарегистрировать пожелание на доработку.<br />=============<br /><br />Регистрируйте.<br />1. В документацию включить список функций, которые нельзя вызывать из OnStop() по каким-либо причинам, как нарушающие корректность выполнения программ Lua или работу терминала.<br />2. После этого у вас будет список функций с ограничением по функционалу. Очевидно, далее следует работать над уменьшением размера этого списка, т.е. надо добавлением возможности всё же вызывать функции из этого списка из OnStop() (c постепенным удалением таковых функций из данного неприятного списка). <br />
			<i>26.07.2021 19:41:40, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56804/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56804/topic6563/</guid>
			<pubDate>Mon, 26 Jul 2021 19:41:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56803/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_E2OLp2Fc" href="/user/14250/" bx-tooltip-user-id="14250">Roman Azarov</a>, <br />====quote====<br />Как уже было сказано ранее, такова реализация работы OnStop() на текущий момент, это не является ошибкой.<br /><br />=============<br />А вот КТО, простите, решает, что является ошибкой, а что нет? Вам уже ГОДАМИ на все лады твердят, что это именно ошибка - и что толку? Я бы даже сказал, НЕПРИЛИЧНАЯ ошибка. Эту ветку цитировать не буду, а фрагменты своих разговоров приведу &quot;в дополнение&quot;:<br /><br /><I>03.07.2021 16:31:47</I><br /><I>Andrey Bezrukov, Андрей, Ваша рекомендация &quot;вынести SetCell в OnStop&quot; есть фактически признание того, что такой поведение ЯВЛЯЕТСЯ ошибкой в работе lua-скриптов.</I><br /><I>Это была, кажется, первая ошибка, на которую я напоролся, придя сюда. Давал соответствующее предложение, которое, кажется, даже было зарегистрировано. Сейчас я сформулировал бы это так: &quot;НЕЛЬЗЯ выносить в обработчик любые действия, которые не могли бы быть выполнены в основном потоке&quot;. Или лучше заменить &quot;нельзя&quot; на &quot;категорически не рекомендуется&quot;. OnStop должен сбрасывать флаг бесконечного цикла в main - И ВСЁ! Более того: всё это дело УЖЕ прекрасно работает, если флаг останова сбрасывается в любом другом месте, кроме OnStop.</I><br /><I> </I><br /><I>19.06.2021 19:08:23</I><br /><I>1. Почти мгновенно после того, как я появился здесь и попробовал написать свой первый скрипт, я столкнулся с ситуацией потери управления по OnStop. Антон тогда подробно расписал мне, что происходит и почему, и с тех пор у меня в самом этом обработчике сидит запись результатов, закрытие лога, убийство таблиц и прочее, но ведь это же ненормально! Согласитесь, весьма неприятно потерять результаты всего дня только потому, что мы имели неосторожность &quot;не вовремя&quot; обратиться к функциям основного потока вроде SetCell.</I><br /><I><B>Пожелание</B>: после остановки бесконечного цикла передавать управление следующему за циклом оператору в main - так, как это и происходит, если флаг isRun сбрасывается не в OnStop, а в любом другом месте.</I><br /><br /><I>Andrey Bezrukov</I><br /><I>23.06.2021 14:11:56</I><br /><I>1. Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа.</I><br /><br />Ну и? <br />
			<i>26.07.2021 15:37:46, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56803/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56803/topic6563/</guid>
			<pubDate>Mon, 26 Jul 2021 15:37:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56801/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_ADA2Vp95" href="/user/82/" bx-tooltip-user-id="82">swerg</a>, <a class="blog-p-user-name" id="bp_KtrdkbUC" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a>, <a class="blog-p-user-name" id="bp_XT3bu7XB" href="/user/14523/" bx-tooltip-user-id="14523">BlaZed</a>, добрый день!<br /><br />Как уже было сказано ранее, такова реализация работы OnStop() на текущий момент, это не является ошибкой.<br />Просьба более подробно описать, как Вы хотели бы видеть логику работы функции в данном месте. Готовы зарегистрировать пожелание на доработку. <br />
			<i>26.07.2021 11:58:08, Roman Azarov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56801/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56801/topic6563/</guid>
			<pubDate>Mon, 26 Jul 2021 11:58:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56556/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_w2OaIHSV" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br />Сам себя поток прибить не может. Должен кто-то "извне".<br />=============<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_Dr9D4Gy9" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br />Уточнение: &nbsp;Для случаев зацикливания или блокировок в завершаемом скрипте пользователя, в основном потоке (а лучше, в специальном служебном потоке, чтобы не отвлекать основной поток от обслуживания колбеков, возможно, других работающих скриптов пользователя) контролировать завершение скрипта. Если за время по умолчанию или явно указанное в OnStop() скрипт не завершен, то выполняется принудительное его завершение, но это, скорее всего, будет происходить редко.<br />=============<br />-------------------<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_5q5ItQbB" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br />Это бы развязать, конечно. "Но эт вряд ли".<br />=============<br /> &nbsp;На самом деле, устранение обсуждаемых здесь ошибочных ситуаций дело разработчика QUIK. Как это реализовать пусть он решает. Что надо устранить вы описали детально и этого, наверное, достаточно. <br />
			<i>08.07.2021 22:23:56, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56556/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56556/topic6563/</guid>
			<pubDate>Thu, 08 Jul 2021 22:23:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56553/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_N7IaAJ8h" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br /> 1. Непонятно, почему таблицы QUIK обслуживаются в основном потоке обработки колбеков. В чем проблема сделать обслуживание таблиц QUIK в отдельном специальном для этого потоке?<br />=============<br />Это как раз понятно: лезть в объекты интерфейса Windows и связанных с этим собственных структур данных из разных потоков - слишком сложная замута. Потому её всегда избегают.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_d0YCWREa" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br />а все работу по завершению скрипта пользователя выполнять в потоке main.<br />=============<br />Сам себя поток прибить не может. Должен кто-то &quot;извне&quot;.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_AhTxEM30" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br /> 2. Зачем завершение скрипта пользователя выполняется в потоке обработки колбеков?<br />=============<br />Не совсем так.<br />Очевидно, что написан обычный стандартный код (который выполняется в основном потоке):<br />
====code====
<pre>вызвать OnStop()
подождать завершения потока main() или таймера на 5 сек&nbsp;&nbsp; &#60;&#60;-- вот тут проблема
if сработал таймер -&#62; прибить поток для main()</pre>
=============
<br /><br />Т.к. идет просто ожидание без процессинга очереди сообщений Windows и прочих действий - то и получаем, что и терминал в это время висит, и функции, которые через основной поток выполняются, не рабтают.<br /><br />Это бы развязать, конечно. &quot;Но эт вряд ли&quot;. <br />
			<i>08.07.2021 21:41:55, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56553/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56553/topic6563/</guid>
			<pubDate>Thu, 08 Jul 2021 21:41:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56550/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1eUfCyMM" href="/user/13952/" bx-tooltip-user-id="13952">TGB</a> написал:<br />работу по завершению скрипта пользователя выполнять в потоке main.<br />=============<br /> &nbsp;Уточнение:<br /> &nbsp;Для случаев зацикливания или блокировок в завершаемом скрипте пользователя, в основном потоке (а лучше, в специальном служебном потоке, чтобы не отвлекать основной поток от обслуживания колбеков, возможно, других работающих скриптов пользователя) контролировать завершение скрипта. Если за время по умолчанию или явно указанное в OnStop() скрипт не завершен, то выполняется принудительное его завершение, но это, скорее всего, будет происходить редко. <br />
			<i>08.07.2021 19:18:05, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56550/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56550/topic6563/</guid>
			<pubDate>Thu, 08 Jul 2021 19:18:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56549/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Так же присоединяюсь ко всему этому негодованию.<br /><br />Еще раз приведу цитату из документации (которую уже тут приводили)<br /><br />====quote====<br />Также необходимо иметь в виду, что функция OnStop() выполняется в основном потоке РМ QUIK, и, <br />так как в момент ожидания завершения скрипта (5 секунд) он занимает основной поток РМ QUIK, то<br />другие обработчики событий уже не вызываются, а само РМ QUIK может некоторое время <br />находиться в «подвисшем» состоянии.<br /><br />=============<br />Зачем OnStop() вообще занимает основной поток пока ожидается завершение скрипта и не дает выполняться другим функциям в основном потоке?<br />Вот реально зачем это надо??<br /><br /> Достаточно чтобы OnStop() выполнился и передал в QUIK сигнал, что через столько-то миллисекунд требуется завершить принудительно скрипт, если он еще вдруг не завершен. Все.<br />А как корректно завершить свой скрипт, пользователь сам разберется.<br />Не надо нам мешать в этом.<br /><br />Прошу разработчиков либо объяснить, зачем OnStop() делает то, что от него совершенно не требуется, либо зарегистрировать пожелание на приведение OnStop() к адекватному поведению. <br />
			<i>08.07.2021 16:46:32, BlaZed.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56549/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56549/topic6563/</guid>
			<pubDate>Thu, 08 Jul 2021 16:46:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56541/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_EDvNB283" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br />Это явная ошибка, которую необходимо исправить.Да, обработчики событий не должны вызываться после OnStop, в этом есть логика, да и это явно описано в документации. Но другие-то функции взаимодействия с терминалом почему не должны работать?? потому что "так получилось"? Нет уж, это не есть обоснование; это лишь признание кривоватой реализации данного места, которая, очевидно, является ошибкой и должна быть исправлена.<br />=============<br /> &nbsp;Присоединяюсь к коллеге.<br /> 1. Непонятно, почему таблицы QUIK обслуживаются в основном потоке обработки колбеков. В чем проблема сделать обслуживание таблиц QUIK в отдельном специальном для этого потоке?<br /> 2. Зачем завершение скрипта пользователя выполняется в потоке обработки колбеков? Наверное, в OnStop() было бы достаточно выставлять признак завершения скрипта, а все работу по завершению скрипта пользователя выполнять в потоке main. <br />
			<i>08.07.2021 10:06:56, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56541/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56541/topic6563/</guid>
			<pubDate>Thu, 08 Jul 2021 10:06:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56531/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_hrJny5XK" href="/user/12999/" bx-tooltip-user-id="12999">Andrey Bezrukov</a> написал:<br />Описываемое Вами поведение, формально, не является проблемой или ошибкой в работе lua-скриптов в терминале.<br />=============<br /><br />Это несоответствие описанного в документации поведения программы, в значит - ошибка.<br />Плюс, &nbsp;конечно, совершенно кривая и топорная реализация ожидания завершения main(), когда &nbsp;(из документации)<br /><br />====quote====<br />"РМ QUIK может некоторое время находиться в «подвисшем» состоянии"<br />=============<br /><br />Итак, открываем документацию, файл <I>"Использование Lua в Рабочем месте QUIK.pdf"</I>.<br /><br />На картинке "Событийная модель" после OnStop мы видим фразу: <br /><br />====quote====<br />"Прекращение вызова обработчиков событий терминала QUIK".<br />=============<br /><br />Однако далее в тексте мы видим другое объяснение:<br /><br />====quote====<br />"Также необходимо иметь в виду, что функция OnStop() выполняется в основном потоке РМ QUIK, и,<br /><B>так как в момент ожидания завершения скрипта (5 секунд) он занимает основной поток РМ QUIK, то<br />другие обработчики событий уже не вызываются</B>, а само РМ QUIK может некоторое время<br />находиться в «подвисшем» состоянии."<br />=============<br /><br />Т.е. это уже не <I>"мы сознательно сделали так, чтобы обработчики не вызывались"</I>, а <I>"ну, блин, ну так во вышло, что по случайному стечению обстоятельств из-за имеющейся реализации обработчики вызываться перестают"</I>. Между <I>"мы сознательно так сделали"</I> и <I>"ну вот так вот получилось"</I> - есть большая разница.<br /><br />Окей, я продолжаю далее следовать рекомендациям из того же описания (официального).<br />Чуть ранее:<br /><br />====quote====<br />Возможные подходы написания скриптов Lua для плагина QLua в Рабочем месте QUIK<br />....<br />2. Вся необходимая логика описывается в функции с предопределенным именем main().<br />=============<br /><br />Супер. Такой подход нам и демонстрирует автор изначального сообщения этой темы. Он все делает в <B>main()</B>. Использует лишь один обработчик, связанный с интерфейсом пользователя <B>OnStop()</B>, т.к. надо же скрипту сообщить "остановись, хватит". Ибо иного пути нам не предоставлено.<br /><br />И тут вдруг выясняется, что в этом описанном в документации подходе есть "особенности", когда часть функций попросту не работают в каких-то ситуациях! Как это так??<br />Это явная ошибка, которую необходимо исправить.<br />Да, обработчики событий не должны вызываться после OnStop, в этом есть логика, да и это явно описано в документации. Но другие-то функции взаимодействия с терминалом почему не должны работать?? потому что "так получилось"? Нет уж, это не есть обоснование; это лишь признание кривоватой реализации данного места, которая, очевидно, является ошибкой и должна быть исправлена. <br />
			<i>07.07.2021 06:33:26, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56531/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56531/topic6563/</guid>
			<pubDate>Wed, 07 Jul 2021 06:33:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56518/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Лучше при штатной работе скриптов вообще не использовать OnStop, которая возникает при нажатии кнопки &quot;Остановить&quot;, слишком много проблем от этого может возникнуть. Считайте, что это -- аварийный способ завершения скрипта. У себя я сделал для каждого из скриптов с GUI специальное окошко, при закрытии которого происходит поднятие флага прерывания и скрипт, периодически проверяя его, должен в разумное время завершить работу и освободить ресурсы. Да, это костыль, но зато не прерывается выполнение потока коллбэков и всё ещё работает штатно. <br />
			<i>06.07.2021 11:12:25, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56518/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56518/topic6563/</guid>
			<pubDate>Tue, 06 Jul 2021 11:12:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56509/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вообще странно, ведь, из описания OnStop следует, что эта функция для того и нужна, чтобы дать время для корректного завершения функции Main.<br />Ну ладно, думаю, надо просто принять к сведению, что после бесконечного цикла в Main не следует размещать какие-то важные или критичные части скрипта. :) <br />
			<i>05.07.2021 16:25:17, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56509/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56509/topic6563/</guid>
			<pubDate>Mon, 05 Jul 2021 16:25:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56460/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_WbBAANm2" href="/user/12999/" bx-tooltip-user-id="12999">Andrey Bezrukov</a>, Андрей, Ваша рекомендация &quot;вынести SetCell в OnStop&quot; есть фактически признание того, что такой поведение ЯВЛЯЕТСЯ ошибкой в работе lua-скриптов.<br /><br />Это была, кажется, первая ошибка, на которую я напоролся, придя сюда. Давал соответствующее предложение, которое, кажется, даже было зарегистрировано. Сейчас я сформулировал бы это так: &quot;НЕЛЬЗЯ выносить в обработчик любые действия, которые не могли бы быть выполнены в основном потоке&quot;. Или лучше заменить &quot;нельзя&quot; на &quot;категорически не рекомендуется&quot;. OnStop должен сбрасывать флаг бесконечного цикла в main - И ВСЁ! Более того: всё это дело УЖЕ прекрасно работает, если флаг останова сбрасывается в любом другом месте, кроме OnStop. <br />
			<i>03.07.2021 16:31:47, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56460/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56460/topic6563/</guid>
			<pubDate>Sat, 03 Jul 2021 16:31:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56452/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте, <a class="blog-p-user-name" id="bp_8cACHUpJ" href="/user/11369/" bx-tooltip-user-id="11369">Сергей</a>.<br /><br />Описываемое Вами поведение, формально, не является проблемой или ошибкой в работе lua-скриптов в терминале.<br /><br />Дело в том, что в текущей реализации интерпретатора LUA в терминале QUIK выполнение функции SetCell, как и обработка события OnStop происходят в основном потоке.<br />В результате этого, функция SetCell и код, следующий за ней не выполняются после завершения обработки OnStop.<br /><br />В качестве возможного решения - предлагаем вынести SetCell в OnStop. <br />
			<i>02.07.2021 15:02:01, Andrey Bezrukov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56452/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56452/topic6563/</guid>
			<pubDate>Fri, 02 Jul 2021 15:02:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа функций OnStop() и SetCell()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message56431/topic6563/">Работа функций OnStop() и SetCell()</a></b> <i>Подвисает скрипт</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Всем привет. Имеется простой скрипт:
====code====
<pre>IsRun = true

function main()

&nbsp;&nbsp;&nbsp;S_TAB = AllocTable()
&nbsp;&nbsp;&nbsp;AddColumn(S_TAB, 1, "Param",true, QTABLE_STRING_TYPE, 18)
&nbsp;&nbsp;&nbsp;CreateWindow(S_TAB)
&nbsp;&nbsp;&nbsp;InsertRow(S_TAB, 1)

&nbsp;&nbsp;&nbsp;while IsRun do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000)
&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;SetCell(S_TAB, 1, 1, "Stopped")
&nbsp;&nbsp;&nbsp;Message('Script stopped')

end

function OnStop()
&nbsp;&nbsp;&nbsp;IsRun = false
end
</pre>
=============
Если вызывается функция OnStop(), то скрипт здорово подвисает при выполнении SetCell(). Подвисает настолько, что код после SetCell не успевает выполняться, т.к. заканчивается таймаут. Причём какой бы большой таймаут ни был, всё что после SetCell не выполняется. Это можно как-то исправить или побороть?<br />Если SetCell разместить внутри OnStop, то скрипт не зависает. Но мне нужно, чтобы SetCell была в Main. Если завершать работу скрипта другим способом (например IsRun = false в любом другом месте), то скрипт также не зависает, и SetCell и весь остальной код выполняется до конца.<br />Может есть какое-то ограничение, о котором я не знаю просто, и нельзя использовать функции для работы с таблицами, когда срабатывает OnStop?<br /><br />Версия Квик 8.8.4.3<br /><br />Не то, чтобы это была критичная проблема, но уж очень много времени я потратил на её поиск :) <br />
			<i>01.07.2021 19:16:49, Сергей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message56431/topic6563/</link>
			<guid>http://forum.quik.ru/messages/forum10/message56431/topic6563/</guid>
			<pubDate>Thu, 01 Jul 2021 19:16:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
