Можно ли зациклить start() ?

 
Можно ли внутри функции start() сделать бесконечный цикл?
Нужно для того, чтобы в период между тиками, эксперт делал некоторую работу, периодически делая sleep().
Будет ли в этом случае вызываться функция deinit(), будут ли приходить тики и т.п.?
Что вообще посоветуете?
 
Поставить бесконечный цикл можно. Только вот терминал спустя какое-то время сам просто напросто завершит этот цикл в связи с превышением допустимого времени работы функции start(). Допустимое время работы функции start() примерно несколько минут. Более точно могут сказать сами разработчики.
 
Полезно все таки читать документацию :):

"...Выполнение функции deinit() ограничивается 2.5 секундами. Если за это время функция не закончила свою работу, то ее выполнение завершается принудительно"

завершается принудительно - это как?
имеется в виду, что делается TerminateThread?

"...Все пришедшие во время выполнения программы новые котировки программой игнорируются до тех пор, пока не завершится очередное выполнение функции start()."

игнорируются вообще, или параметры Bid/Ask обновляются без вызова Start()
 
Поставить бесконечный цикл можно. Только вот терминал спустя какое-то время сам просто напросто завершит этот цикл в связи с превышением допустимого времени работы функции start(). Допустимое время работы функции start() примерно несколько минут. Более точно могут сказать сами разработчики.

а вот про это в документации ни слова 8-/
 
Допустимое время работы функции start() примерно несколько минут. Более точно могут сказать сами разработчики.

а вот про это в документации ни слова

Ни слова потому, что время выполнения функции start ограничивается только при принудительном завершении работы эксперта. Цитата из вышеприведённой ссылки
===
Отсоединение программы от графика, смена финансового инструмента и/или периода графика, смена счета, закрытие графика, а также завершение работы клиентского терминала прерывает выполнение программы. Если функция start() выполнялась на момент команды на завершение работы, оставшееся время работы ограничивается 2.5 секундами. Программа может узнать, что её пытаются завершить при помощи встроенной функции IsStopped() и корректно закончить свою работу.
===
 
Я построил свою программку на зацикленном коде.

По факту событий: время выполнения Start() не ограничено.
При заходе в Start() "обычным" порядком, т.е. в незацикленном режиме, автоматически обновляются Bid и Ask. При зацикленном варианте эти параметры, естественно, не обновляются. Но ничего не мешает принудительно запрашивать свежие котировки, используя ф-ию RefreshRates( ). Я так и сделал, работает безотказно.

К сведению: настоятельно рекомендуется где-то в теле цикла поставить Sleep(). Значение можете подобрать самостоятельно. При маленькой длительности цикла достаточно будет и Sleep(1). Если цикл увесистый, то можно увеличить до Sleep(10); больше, пожалуй, не имеет смысла. Если Sleep() не поставить вообще, то постоянно непрерывно выполняющийся код может сильно нагрузить процессор, что может привести к сильному запаздыванию, "тормознутости" всей системы и даже к зависанию.
 
Slawa, SK
Спасибо за ответы, надеюсь, что они не будут противоречить утверждению solandr

SK
При маленькой длительности цикла достаточно будет и Sleep(1). Если цикл увесистый, то можно увеличить до Sleep(10);

на самом деле - нет никакой разницы между Sleep(1) и Sleep(10) - шедулер NT+ систем работает с квантами порядка 10 мс. Поэтому даже sleep(0) отлично помогает, хотя по доке он отдает тока оставшееся время кванта.
но это так... для справки...
Причина обращения: