EventSetTimer() работает или нет - страница 2

 

Автор топика приколист однако....

Удалять таймер нужно, если он был до этого инициализирован в коде....

 
AlexSTAL:

Автор топика приколист однако....

Удалять таймер нужно, если он был до этого инициализирован в коде....

а ну извините))) я думал, что он мог застрять в терминале . Прописал этот когд в конце инита. Так как есть хендлы на индикаторы с таймерами. Все равно через секунду таймер работает((
 
x_trader:
только при инициализации))) феноменальные вещи у меня вечно происходят в этом мкл5 просто улет)))

Если только при инициализации то таймер у Вас должен уничтожаться раньше (если таймер активен), в процессе выполнения OnDeinit().

Уже наверное больше года активно работаю с таймером, а таких проблем не было.

Хотя я отслеживаю причину инициализации и деинициализации, что позволяет мне выполнять определенные действия только один раз.


 

Да я тоже в шоке.  Кроме того меня удивило, что значения из иницированных буферов никогда не дождаться, сколько слипов не ставь, только пропуском до следующего обращения. Т.е. грубо говоря советник может запросить значение буфера данных и ждать час и не дождаться заполнения, а если пропустить до след тика то буфер будет готов. 

 

AlexSTAL:

Удалять таймер нужно, если он был до этого инициализирован в коде....

Ну да, с учетом этого момента код в блоке деинициализации должен принять примерно такой вид (для надежности)

if(error_bool)
{
EventKillTimer();
}
x_trader:
а ну извините))) я думал, что он мог застрять в терминале . Прописал этот когд в конце инита. Так как есть хендлы на индикаторы с таймерами. Все равно через секунду таймер работает((
На какие индикаторы, с какими таймерами?
 
x_trader:
а ну извините))) я думал, что он мог застрять в терминале . Прописал этот когд в конце инита. Так как есть хендлы на индикаторы с таймерами. Все равно через секунду таймер работает((

Вы подробно опишите, то что делаете...

Такое ощущение, что Вы не там изменяете таймер и не для того...

Ключевые слова:

Каждый эксперт и каждый индикатор работает со своим таймером, и получает события только от него.
Для каждой программы может быть запущено не более одного таймера. 
 
AlexSTAL:

Вы подробно опишите, то что делаете...

Такое ощущение, что Вы не там изменяете таймер и не для того...

Ключевые слова:

Только что об этом подумал.

Может ловим события от таймера эксперта в индикаторе (или что-то в этом роде)... :)

 
Interesting:

Ну да, с учетом этого момента код в блоке дееинстоляции должен принять примерно такой вид (для надежности)

На какие индикаторы, с какими таймерами?
ВСЕ ЗАРАБОТАЛО))))  Ну пара хэндлов на индикаторы в ините была. В индикаторе был провисан таймер на одну секунду. Как тока я его удалил, сразу советник стал таймерить через 60 секунд. Но странно это все. Ведь я прописал после хэндов уже и килл тайм и новый таймер?! А не работал таймер.
 
AlexSTAL:

Вы подробно опишите, то что делаете...

Такое ощущение, что Вы не там изменяете таймер и не для того...

Ключевые слова:

 

 я этим и руководствовался, вроде индикатор это индикатор а советник это советник, а получается что их по таймерам не развязать. 

 
x_trader:
а ну извините))) я думал, что он мог застрять в терминале . Прописал этот когд в конце инита. Так как есть хендлы на индикаторы с таймерами. Все равно через секунду таймер работает((

Почитайте в справке - в каких случаях вызывается OnInit():

Функция OnInit() является обработчиком события Init. Может иметь тип void или int, параметров не имеет:

void OnInit();

Событие Init генерируется сразу после загрузки эксперта или индикатора, для скриптов это событие не генерируется. Функция OnInit() используется для инициализации. Если OnInit() имеет возвращаемого значения типа int, то ненулевой код возврата означает неудачную инициализацию и генерирует событие Deinit с кодом причины деинициализации REASON_INITFAILED.

Функция OnInit() типа void всегда означает удачную инициализацию.


Причина обращения: