Но всё-таки возник вопрос - какой метод официально рекомендуется, чтобы узнать, что CreateDataSource загрузила все данные, которые были актуальны на момент её вызова?
Поясню на примере, что именно я имею ввиду. Код такой:
Код |
---|
sec=<код бумаги>
function main()
local function SetLoaded()
loaded = true
end
loaded = false
file = io.open("output.txt", "w+t")
ds = CreateDataSource("TQBR", sec, INTERVAL_M15)
ds:SetUpdateCallback(SetLoaded)
sec_name = getSecurityInfo("TQBR", sec).short_name
file:write("name: "..sec_name)
repeat sleep(1) until loaded
s=ds:Size()
file:write(" size: "..s)
ds:Close()
file:close()
end
|
Так вот, если sec равно, например "AFLT", то скрипт отрабатывает, завершается и на выходе я имею в output.txt строчку "name: Аэрофлот size: 3013", что абсолютно понятно, правильно.
А вот если я ставлю sec равной "ERCO", то скрипт подвисает и, после его прерывания, в output.txt я получаю лишь "name: ЭРКО ао".
Очевидно, что не срабатывает callback для бумаги ERCO. Судя по тому, что я вижу в терминале - по бумаге ERCO торгов давно (или вообще) не было. Очевидно с сервера приходит пустой массив данных. Но ведь он приходит (файл TQBR_ERCO_15.dat размером 41 байт в каталоге archives присутствует), поэтому вопросы:
1) почему в данном случае не срабатывает callback? (предполагаю, что потому, что нет данных, но тогда возникает куда более важный вопрос №2)
2) как понять, что уже пора перестать ждать данные, принять size=0 и пойти по жизни дальше? (как отличить ситуацию продолжения ожидания данных с сервера от ситуации отсутствия данных?)