<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Отработка OnOrder после остановки скрипта]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Отработка OnOrder после остановки скрипта форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 09 Apr 2026 19:36:01 +0300</pubDate>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27875/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вопрос снимается за отсутствием ответа, запишем это в пользу минусов и ошибок quik. <br />
			<i>24.11.2017 11:06:45, nero333.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27875/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27875/topic3221/</guid>
			<pubDate>Fri, 24 Nov 2017 11:06:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27872/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_wqgxA7nQ" href="/user/7086/" bx-tooltip-user-id="7086">nero333</a> написал:<br /> <noindex><a href="https://forum.quik.ru/user/115/" target="_blank" rel="nofollow">_sk_</a></noindex> , а сможете ли вы запустить скрипт из другого потока и, если да, то каким образом?<br />=============<br />Скрипт -- это некий код, часть из которого исполняется в main-потоке, а часть в потоке коллбэков. Запускается скрипт кнопкой &quot;Запустить&quot;. После этого начинает выполняться код main() и время от времени будут вызываться коллбэки. Фраза &quot;запустить скрипт из другого потока&quot; кажется некорректной. <br />
			<i>24.11.2017 06:40:00, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27872/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27872/topic3221/</guid>
			<pubDate>Fri, 24 Nov 2017 06:40:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27866/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/115/" target="_blank" rel="nofollow">_sk_</a></noindex>, а сможете ли вы запустить скрипт из другого потока и, если да, то каким образом? <br />
			<i>23.11.2017 13:40:02, nero333.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27866/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27866/topic3221/</guid>
			<pubDate>Thu, 23 Nov 2017 13:40:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27791/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_HTonI6Y9" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br /><br />====quote====<br /> nero333 &nbsp; написал:<br />_sk_, спасибо, это хорошая идея, думаю реализовать что-то подобное. Вопрос был к разработчикам относительно кнопки &quot;Остановить&quot;, аварийный выход - это всё-таки когда скрипт падает с выводом ошибки в поле &quot;Ошибки выполнения скрипта&quot;.<br />=============<br />Кнопка &quot;Остановить&quot; это не аварийный выход, а просто остановка скрипта.<br />Принудительная (в Вашем термине &quot;аварийная&quot;) остановка происходит не по нажатию кнопки, а по истечении таймаута 5 сек.<br />И это не зависит от того что в это время делает main, что-бы Вы туда не написали скрипт принудительно завершится.<br />Таймаут можно изменить, это делается в return события OnStop (см документацию QLUA.chm)<br />Если Вам что-то нужно снять заявки перед остановкой скрипта, делайте это в самом OnStop<br />=============<br />OnStop -- это последний коллбэк, который будет вызван при остановке скрипта. Однако, чтобы корректно сделать <I>всё</I>, что необходимо для снятия отправленных заявок <I>в общем случае</I>, не получится. Например, если транзакция на постановку заявки отправлена, OnTransReply ещё не пришёл, а пришёл OnStop. Как снять заявку, если мы ещё не знаем и не узнаем её orderNum? Никак.<br /><br />Кроме того, в OnStop делать завершение неудобно, т.к. логика обработки находится в main-потоке.<br /><br />Именно поэтому <I>нормальная</I> практика прерывания потока в многопоточном программировании состоит в уведомлении другого потока о том, что надо завершить работу. Эта практика и была предложена. <br />
			<i>20.11.2017 07:02:36, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27791/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27791/topic3221/</guid>
			<pubDate>Mon, 20 Nov 2017 07:02:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27777/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_RQPxdp9K" href="/user/17/" bx-tooltip-user-id="17">Sergey Gorokhov</a> написал:<br />Кнопка &quot;Остановить&quot; это не аварийный выход, а просто остановка скрипта.<br />Принудительная (в Вашем термине &quot;аварийная&quot;) остановка происходит не по нажатию кнопки, а по истечении таймаута 5 сек.<br />И это не зависит от того что в это время делает main, что-бы Вы туда не написали скрипт принудительно завершится.<br />Таймаут можно изменить, это делается в return события OnStop (см документацию QLUA.chm)<br />Если Вам что-то нужно снять заявки перед остановкой скрипта, делайте это в самом OnStop<br />=============<br />Я могу и в main-е снять заявки, вопрос не в этом был, а в том, почему OnOrder не отрабатывает после остановки. Запустите скрипт из начала темы, сразу все станет понятно. Строка message(tostring(IS_STOPPING)) должна была бы выводить true в конце, если бы OnOrder отрабатывал.<br /><br />Попробовал перенести снятие заявки в OnStop, как вы написали, &nbsp;- всё то же, не работает OnOrder. <br />
			<i>17.11.2017 17:17:02, nero333.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27777/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27777/topic3221/</guid>
			<pubDate>Fri, 17 Nov 2017 17:17:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27776/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_HHo5gVMS" href="/user/7086/" bx-tooltip-user-id="7086">nero333</a> написал:<br />_sk_, спасибо, это хорошая идея, думаю реализовать что-то подобное. Вопрос был к разработчикам относительно кнопки "Остановить", аварийный выход - это всё-таки когда скрипт падает с выводом ошибки в поле "Ошибки выполнения скрипта".<br />=============<br /><br />Кнопка "Остановить" это не аварийный выход, а просто остановка скрипта.<br />Принудительная (в Вашем термине "аварийная") остановка происходит не по нажатию кнопки, а по истечении таймаута 5 сек.<br />И это не зависит от того что в это время делает main, что-бы Вы туда не написали скрипт принудительно завершится.<br />Таймаут можно изменить, это делается в return события OnStop (см документацию QLUA.chm)<br />Если Вам что-то нужно снять заявки перед остановкой скрипта, делайте это в самом OnStop <br />
			<i>17.11.2017 16:57:07, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27776/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27776/topic3221/</guid>
			<pubDate>Fri, 17 Nov 2017 16:57:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27774/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/115/" target="_blank" rel="nofollow">_sk_</a></noindex>, спасибо, это хорошая идея, думаю реализовать что-то подобное. Вопрос был к разработчикам относительно кнопки &quot;Остановить&quot;, аварийный выход - это всё-таки когда скрипт падает с выводом ошибки в поле &quot;Ошибки выполнения скрипта&quot;. <br />
			<i>17.11.2017 16:30:24, nero333.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27774/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27774/topic3221/</guid>
			<pubDate>Fri, 17 Nov 2017 16:30:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27753/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_luWhD6eb" href="/user/7086/" bx-tooltip-user-id="7086">nero333</a> написал:<br />Он не остановит работу, ведь main продолжает работать. Что вы посоветуете сделать, как выйти из main-a только удостоверившись, что все заявки сняты (а это можно сделать только по результатам колбека OnOrder)?<br />=============<br />У меня используется следующая схема. Скрипт создаёт окно, где отображается информация о его работе (позиции, прибыли/убытки и др.). Если его закрывают нажатием на крестик в правом верхнем углу окна, то скрипт понимает, что окно закрыто (IsWindowClosed(windowId) == true), поднимает флаг, аналогичный Вашему IS_STOPPING, снимает необходимые заявки, закрывает файлы, в которые шла запись и т.п., после чего завершает исполнение функции main. Получается, что использование крестика в правом верхнем углу окна -- это штатный выход из скрипта, а нажатие кнопки &quot;Остановить&quot; в окне скриптов -- аварийный выход. <br />
			<i>17.11.2017 06:28:22, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27753/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27753/topic3221/</guid>
			<pubDate>Fri, 17 Nov 2017 06:28:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27741/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Он не остановит работу, ведь main продолжает работать. Что вы посоветуете сделать, как выйти из main-a только удостоверившись, что все заявки сняты (а это можно сделать только по результатам колбека OnOrder)?<br /><br />И кстати, с таблицами такая же ситуация, после нажатия на &quot;Остановить&quot; я уже не могу корректно запустить SetCell - он просто ждет 5 секунд и содержимое ячейки не меняет. <br />
			<i>16.11.2017 19:01:39, nero333.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27741/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27741/topic3221/</guid>
			<pubDate>Thu, 16 Nov 2017 19:01:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27740/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_sbWZhRar" href="/user/7086/" bx-tooltip-user-id="7086">nero333</a> написал:<br />Получается, что после нажатия "Остановить" OnOrder уже не отрабатывает. Это ошибка или так должно быть?<br /><br />=============<br />Если остановить скрипт то он остановит свою работу, все логично. <br />
			<i>16.11.2017 18:31:56, Sergey Gorokhov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27740/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27740/topic3221/</guid>
			<pubDate>Thu, 16 Nov 2017 18:31:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Отработка OnOrder после остановки скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message27739/topic3221/">Отработка OnOrder после остановки скрипта</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br /><br />Скрипт ниже выставляет заявку при старте, а при нажатии на кнопку &quot;Остановить&quot; снимает ее.<br />
====code====
<pre>IS_RUN = true
IS_STOPPING = false
ORDER_NUM = ''

function main()

&nbsp;&nbsp;&nbsp;-- ставим заявку
&nbsp;&nbsp;&nbsp;local t =
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLASSCODE = 'TQBR',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SECCODE = 'MVID',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACTION = 'NEW_ORDER',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACCOUNT = 'L01-00000F00',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLIENT_CODE = 'DEMO915',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TYPE = 'L',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPERATION = 'B',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QUANTITY = '1',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRICE = '393',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRANS_ID = '1'
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;sendTransaction(t)
&nbsp;&nbsp;&nbsp;while IS_RUN do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- выполнение скрипта останавливается - снимаем заявку
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if IS_STOPPING then 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local t =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLASSCODE = 'TQBR',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SECCODE = 'MVID',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACTION = 'KILL_ORDER',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORDER_KEY = tostring(ORDER_NUM),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRANS_ID = '1'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendTransaction(t)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for i=1,25 do sleep(200) end -- ждем 5 сек. в надежде что OnOrder отработает снятую заявку
&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;sleep(500);
&nbsp;&nbsp;&nbsp;end
end


function OnStop()
&nbsp;&nbsp;&nbsp;IS_STOPPING = true
&nbsp;&nbsp;&nbsp;SLEEP_TIME = 50;
end

function OnOrder(order)

&nbsp;&nbsp;&nbsp;ORDER_NUM = order.ordernum
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;message(tostring(IS_STOPPING))
end
</pre>
=============
А это вывод в окне сообщений:<br /><br />[FILE ID=3668] <br /><br /><br />Получается, что после нажатия &quot;Остановить&quot; OnOrder уже не отрабатывает. Это ошибка или так должно быть?<br />Версия квик 7.14.1.7 <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=3668&" width="483" height="110" /><br /><i>16.11.2017 18:26:21, nero333.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message27739/topic3221/</link>
			<guid>http://forum.quik.ru/messages/forum10/message27739/topic3221/</guid>
			<pubDate>Thu, 16 Nov 2017 18:26:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
