<?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>Tue, 21 Apr 2026 09:59:30 +0300</pubDate>
		<item>
			<title>Универсальный обработчик событий  - это просто</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum17/message81064/topic9436/">Универсальный обработчик событий  - это просто</a></b> в форуме <a href="http://forum.quik.ru/forum17/">Обмен опытом</a>. <br />
			Эта тема для начинающих писателей роботов на Lua в QUIK.<br />Cкрипт, на основе которого можно строить различных роботов.<br />В нем реализована очередь , что обеспечивает обработку всех событий<br />
====code====
<pre> TQ={}; jQr,jQw=0,0; --очередь
----------------------------
function main()
&nbsp;&nbsp; while run==1 do wait_connect()
&nbsp;&nbsp;&nbsp;while run==2 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while jQw&#62;jQr do local n=jQr+1;local t=TQ&#91;n&#93;;TQ&#91;n&#93;=nil;jQr=n;t.fun(t);end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(10)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp; end
end 
-----------------------------
local function wQ(t,fun) --функция записи обработчика в очередь 
&nbsp;&nbsp; if fun then
&nbsp;&nbsp; t.fun=fun; local n=jQw;if jQr==jQw then jQw=0;jQr=0;end n=jQw+1;TQ&#91;n&#93;=t; jQw=n;
&nbsp;&nbsp; end
end
-----функции обратного вызова QLua------------------------
function OnDepoLimit(t) wQ(t,setPos);&nbsp;&nbsp;end
----------------------------
function OnFuturesClientHolding(t) wQ(t,setPos);&nbsp;&nbsp;end
-----------------------------
function OnOrder(t) wQ(t,Order);&nbsp;&nbsp;end
----------------------------
function OnStopOrder(t) wQ(t,StopOrder);&nbsp;&nbsp;end
-----------------------
function OnTransReply(t) wQ(t,TransReply);&nbsp;&nbsp;end
----------------------------
function OnParam(c, s) wQ({sec_code=s,class_code=c},Param); end&nbsp;&nbsp;
----------------------------
function OnQuote(c, s) wQ({sec_code=s,class_code=c},Quote); end 
------------------------
function OnDisconnected() run=1 end
-------------------------
function OnConnected(flag) Trans,Tsec,Tclas,Tclient,pos={},{},{},{},{} run=1 end&nbsp;&nbsp;
---------------------------
function CloseTH() if td_id then DestroyTable(td_id); end run =0 if f then f:close() end end
------------------------------
function OnStop(s) CloseTH();return 1000 end 
---------------------------
function OnClose()&nbsp;&nbsp;CloseTH() end 
---------------------------
function OnCleanUp() run=1; end
---------------
function OnInit(path) OnConnected(true); end
</pre>
=============
Функции обратного вызова записываются одинаково.<br />В них мы помещаем в очередь TQ &nbsp;полученные параметры и имя функции, которая обрабатывает данное событие. <br />Функция обработки событий реализуется отдельно. <br />Если функция обработки события отсутствует, то событие не будет записываться во очередь. &nbsp; <br />
			<i>29.01.2026 06:21:45, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum17/message81064/topic9436/</link>
			<guid>http://forum.quik.ru/messages/forum17/message81064/topic9436/</guid>
			<pubDate>Thu, 29 Jan 2026 06:21:45 +0300</pubDate>
			<category>Обмен опытом</category>
		</item>
	</channel>
</rss>
