rpns (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
CreateDataSource: задержка получения данных
 
Таким образом, пока callback не завершился, "данные не едут" (потому что терминал не активен и не принимает). Значит, в колбеке ЖДАТЬ данных НЕЛЬЗЯ, а можно только обрабатывать УЖЕ поступившие (например, когда коллбек и вызывается терминалом для обработки последних изменений). Надеюсь, я правильно понял?

Большое спасибо за подробное объяснение!
CreateDataSource: задержка получения данных
 
Sergey Gorokhov,  спасибо! В main все работает ожидаемым образом. (Кстати, и без вызова SetEmptyCallback. Зачем он тогда?)

А вот сути проблемы я, к сожалению, не понял. Вы пишите:
Цитата
Все колбеки выполняются в основном потоке терминала, т.е. пока колбек не завершит работу, терминал будет висеть и ничего не делать.
У меня есть только один колбек OnInit, или нет?

До вызова main в нем неинициализированной глобальной переменой sz_sr присваивается некоторое значение. OnInit завершается (в основном потоке). Затем (если я верно понял) в отдельном потоке запускается и нормально работает main. Никто, вроде, не висит больше. Но почему-то присвоенное значение -- это 0, что обнаруживается в самом же вызове OnInit. Причем лишь каждый ВТОРОЙ запуск скрипта (а иначе -- правильное значение).

Что вообще стоит делать в OnInit? Можно, например, стакан заказать (Subscribe_Level_II_Quotes)?

Очень хотелось бы разобраться. Еще раз благодарю!
CreateDataSource: задержка получения данных
 
В функции OnInit, чтобы получить несколько свечей истории, выполняется следующий код:

Код
 ds_sr, err = CreateDataSource(class, sr_sec, INTERVAL_H1)
 if not ds_sr then message(err, 1) end

 ds_sp, err = CreateDataSource(class, sp_sec, INTERVAL_H1)
 if not ds_sp then message(err, 1) end

 ds_sr : SetEmptyCallback()
 ds_sp : SetEmptyCallback()

 local i = 0
 while (not(sz_sr and sz_sr and sz_sr > 0 and sz_sp > 0) and i < 30) do
      sleep(1000)
      sz_sr = ds_sr:Size()
      sz_sp = ds_sp:Size()
      i = i + 1
 end
 message("i = "..i, 1)    
 message("sz_sr, sz_sp = "..sz_sr..", "..sz_sp,1)

По непонятной причине правильный размер истории выдается лишь при каждом втором запуске скрипта, а при остальных запусках переменные sz_sr и sz_sp имееют значение 0, несмотря на тридатисекундное ожидание правильного значения. В чем ошибка? Как гарантировать разумный Size при всех запусках?

Благодарю за любую помощь!
Страницы: 1
Наверх