Новая версия платформы MetaTrader 5 build 2007: Экономический календарь, MQL5-программы в виде сервисов - страница 13

 
Igor Zakharov:

Скорее всего потому что GetMicrosecondCount целочисленный, а Set объявлен с double. В таких случаях никогда не вылезает.

Скорее всего, в этом причина. Но если я набираю математическое выражение, которое начинается с целочисленного значения, то поведение правильным назвать не могу.

 

Нужно, чтобы таймер отрабатывал не с большой погрешностью, а тут такое.

const bool Init = EventSetMillisecondTimer(1); // Можно и 10 поставить, результат не изменится
int i = 0;
const ulong StartTime = GetMicrosecondCount();

void OnTimer()
{
  i++;
}

void OnDeinit( const int )
{
  Print((GetMicrosecondCount() - StartTime) / (i * 1000)); // 15
}

Если ставишь 20, то уже 30 получаешь. 100 - 110.

 
fxsaber:

Нужно, чтобы таймер отрабатывал не с большой погрешностью, а тут такое.

Если ставишь 20, то уже 30 получаешь. 100 - 110.

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

делайте цикл while внутри таймера

 
Maxim Dmitrievsky:

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

делайте цикл while внутри таймера

Так это GetTickCount касается.

 
Maxim Dmitrievsky:

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

делайте цикл while внутри таймера

А кстати, бесконечные циклы починили? Если их использовать, то нельзя было настройки поменять. Только если переприкреплять робота к графику.

 
fxsaber:

Так это GetTickCount касается.

милисеконд таймер то же самое

 
Igor Zakharov:

А кстати, бесконечные циклы починили? Если их использовать, то нельзя было настройки поменять. Только если переприкреплять робота к графику.

так надо просветы оставлять для других действий :)

 
Igor Zakharov:

А кстати, бесконечные циклы починили? Если их использовать, то нельзя было настройки поменять. Только если переприкреплять робота к графику.

А почему Вы решили, что они не работали ?

Чтобы переинициализировать EA, его нужно сначала остановить, но он в бесконечном цикле!

Для корректной остановки MQL программы используйте while(!IsStopped()) { }

 
Maxim Dmitrievsky:

так надо просветы оставлять для других действий :)

Перегруза/подвисания не было - я слип WinAPIшный использовал, с переустановкой разрешения системного таймера. Просвет был :)

 
Ilyas:

А почему Вы решили, что они не работали ?

Чтобы переинициализировать EA, его нужно сначала остановить, но он в бесконечном цикле!

Для корректной остановки MQL программы используйте while(!IsStopped()) { }

Спасибо! Попробую в ближайшем "быстром" советнике!

Не помню, какие билды тогда были, но примерно пол-года или чуть более тому назад - не помогало. 

Вообще, это не очень логично, ведь есть REASON_PARAMETERS, который не разрывает цикл. А, например, REASON_RECOMPILE или REASON_REMOVE - может его остановить.

В любом случае - спасибо за решение!

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