[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения

Страницы: 1
RSS
[8.13] регрессия - CreateDataSource возвращает ошибку при запуске после подключения
 
Код
if isConnected ( ) == 1 and do_cycle then
  do_cycle = false
  for class in getClasses ( ):gmatch ( "," ) do    for sec in getClassSecurities ( ):gmatch ( "," ) do      ds, err = CreateDataSource ( class, sec, INTERVAL_M1 )
В предыдущей версии работало, сейчас сыпет ошибки. Начинает работать только после перезапуска скрипта.
 
Артем, добрый день!

Приведите, пожалуйста, полный скрипт, при работе которого воспроизводится описанная проблема.
О какой конкретно ошибке идет речь?
 
Код
local classes = {
    'TQBR',
    'SPBXM',
}
local intervals = {
    INTERVAL_M1,
    INTERVAL_M2,
}
function main ( )
    while isConnected ( ) == 0 do sleep ( 10000 ) end
    local list = { }
    for _, int in ipairs ( intervals ) do        
        for _, class in ipairs ( classes ) do
            for sec in getClassSecurities ( class ):gmatch ( "([^,]+)") do
                    table.insert ( list, { class = class, sec = sec, int = int } )
        end
        end
    end

    local sources = { }
    for _, entry in pairs ( list ) do
        local source, error = CreateDataSource ( entry.class, entry.sec, intervals[ entry.int ] )
        if source then
            source:SetEmptyCallback ( )
            table.insert ( sources, source )
        else
            message ( string.format ( "Failed to create data source: %s\n%s %s %s" , error, entry.class, entry.sec, entry.int ) )
        end
    end
    for _, source in ipairs ( sources ) do 
        ...
    end
end
Скрипт висит запущеный. При подключении сыпет ошибки что не указанный инструмент не существует. При перезапуске скрипта, работает как положено.
 
Просто наблюдение: сначала isConnected() меняется на 1, затем через некоторое время вызывается OnConnected.
Если в это время вызвать CreateDataSource, то он завершится неудачей.
Есть подозрение, что так было и в предыдущих версиях, просто вместо ошибки возвращалась пустая DataSource. Можете проверить их Size().

Кстати, обнаружилась ещё одна неприятность:
В 8.13 даже если CreateDataSource, вызванный в момент подключения до OnConnected(), не вернул ошибку, то Size так и останется нулевым.
Suport, обратите внимание.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, в предыдущих версиях возвращался рабочий DataSource. В коде который разгребает открытые источники там как раз есть ожидание по длине данных, раньше работало.
 
Старатель,я приклеил патч к isConnected(), теперь работает. Спасибо.


К разработчикам просьба починить, чтобы isConnected() не возвращал истину до того как был вызван колбек OnConnected().
 
Код
 if error then message ( string.format ( "Failed to create data source: %s\n%s %s %s" , error, class, sec, int ) ) end
 
 
Цитата
Артем написал:
раньше работало.
Вы заблуждаетесь. У вас стоит 10-секундное ожидание после подключения, поэтому часть DataSource может быть запрошена уже после OnConnected.
Ещё если графики были открыты до запуска скрипта, то DataSource по ним сразу будут иметь ненулевой размер (при наличии свечей, естественно).
Вот специально написал демонстрационный скрипт:
Скрытый текст

Запускаем при установленном соединении - работает нормально.

Если запустить при неустановленном соединении а затем подключиться, то скрипт так и будет висеть в ожидании.
Кроме того, если после этого открыть диаграмму с графиком из списка list (если не был открыт до запуска скрипта), то график будет пустой. Свечи появятся только после разрыва соединения.

Проверялось в 8.13 и 8.1
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, во-первых если раньше с этим кодом каждый раз работало а теперь каждый раз отказы, то не в коде проблема. Во-вторых выбросить пять тысяч сообщений занимает несколько минут так что если просто в ожидании было дело то их бы там было гораздо меньше. И в-третьих это демонстрационный код, в реальном коде ожидание подключения стоит в другом месте - суть от этого не меняется.
 
Точнее сказать, ожидания подключения там вообще нет.
Цитата
Старатель написал:
У вас стоит 10-секундное ожидание после подключения
Перед подключением. Ну и для поста на форуме я нулей от балды бахнул просто, получилось 10 секунд. Тут суть не в этом совершенно.
 
Цитата
Старатель написал:
даже если CreateDataSource, вызванный в момент подключения до OnConnected(), не вернул ошибку, то Size так и останется нулевым.
Цитата
Старатель написал:
в предыдущих версиях, просто вместо ошибки возвращалась пустая DataSource.

Вместо тысячи слов:
Скрытый текст

Никто не говорит, что это нормально. Просто факт: отсутствие ошибки ещё не гарантирует удачный заказ графика.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель, у меня там стоял таймаут на пустые источники. Все данные приходили исправно на все заказаные источники.
Страницы: 1
Читают тему
Наверх