Универсальный обработчик событий - это просто

Страницы: 1
RSS
Универсальный обработчик событий - это просто
 
Эта тема для начинающих писателей роботов на Lua в QUIK.
Cкрипт, на основе которого можно строить различных роботов.
В нем реализована очередь , что обеспечивает обработку всех событий
Код
 TQ={}; jQr,jQw=0,0; --очередь
----------------------------
function main()
   while run==1 do wait_connect()
   while run==2 do
     while jQw>jQr do local n=jQr+1;local t=TQ[n];TQ[n]=nil;jQr=n;t.fun(t);end
     sleep(10)
      end
   end
end 
-----------------------------
local function wQ(t,fun) --функция записи обработчика в очередь 
   if fun then
   t.fun=fun; local n=jQw;if jQr==jQw then jQw=0;jQr=0;end n=jQw+1;TQ[n]=t; jQw=n;
   end
end
-----функции обратного вызова QLua------------------------
function OnDepoLimit(t) wQ(t,setPos);  end
----------------------------
function OnFuturesClientHolding(t) wQ(t,setPos);  end
-----------------------------
function OnOrder(t) wQ(t,Order);  end
----------------------------
function OnStopOrder(t) wQ(t,StopOrder);  end
-----------------------
function OnTransReply(t) wQ(t,TransReply);  end
----------------------------
function OnParam(c, s) wQ({sec_code=s,class_code=c},Param); end  
----------------------------
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  
---------------------------
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()  CloseTH() end 
---------------------------
function OnCleanUp() run=1; end
---------------
function OnInit(path) OnConnected(true); end
Функции обратного вызова записываются одинаково.
В них мы помещаем в очередь TQ  полученные параметры и имя функции, которая обрабатывает данное событие.
Функция обработки событий реализуется отдельно.
Если функция обработки события отсутствует, то событие не будет записываться во очередь.  
Страницы: 1
Читают тему
Наверх