Общий колбек для всех источников данных

Опубликовано в QLua

Реализация обратного вызова функций посредством SetUpdateCallback рассчитана на создание уникальной вызываемой функции для каждого потока данных. В частности, в вызываемую процедуру не передается информация о самом инструменте. В случае, когда заранее неизвестно количество потоков данных, задачу можно решить двумя способами:

  1. генерация необходимой функции на лету
  2. использование обертки (или замыкание)

Иллюстрация решения проблемы с помощью обертки из общей для всех потоков данных анонимной функции обратного вызова:

function mycallbackforallstocks(class,security,index) 
-- Теперь в колбеке нам доступны код и класс инструмента
   message(class .. " " .. security,1)
-- Также доступны все параметры, которые приходят с колбеком из терминала
xxx = index
end function DataSource(class,security,interval)
   local ds = CreateDataSource(class,security,interval)
ds:SetUpdateCallback(function(...) mycallbackforallstocks(class,security,...) end)
   return ds
end function main()
ds =
{    DataSource("SPBFUT", "RIZ3",INTERVAL_M1),
     DataSource("SPBFUT", "SiZ3",INTERVAL_M2),
     DataSource("SPBFUT", "EDZ3",INTERVAL_M3)
}
while true do
   sleep(1000)
end

Недостаточно прав для комментирования

Архив QLua