Скачать MetaTrader 5

Что возвращает GetTickCount() после переполнения счетчика?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Что такое социальный трейдинг? Прочти статью и узнай!
Maestro
257
Maestro 2006.10.30 19:13 
Что возвращает GetTickCount() после переполнения счетчика? И происходит ли автоматическое обнуление счетчика?
MetaQuotes
Админ
24952
Renat Fatkhullin 2006.10.30 19:25  
Так как значение DWORD (беззнаковое 32битное число), то счетчик просто переходит через ноль и идет дальше. После ноля идет 1,2,3 ...
Vladislav Andruschenko
92001
Vladislav Andruschenko 2013.02.07 08:16  
Подскажите пожалуйста, данная функция не работает в тестере чем ее можно заменить? 
Igor Kim
2741
Igor Kim 2013.02.11 09:11  
У меня недавно была ситуация с переполнением. Функция GetTickCount() возвращала отрицательное целое большое число... Перезагрузил компьютер... Сейчас жалею. Нужно было отследить модуль этого числа, то есть значение после обработки функцией MathAbs(). Если бы оно наращивалось, то можно было бы всегда брать значение MathAbs(GetTickCount()) и не бояться переполнения.
Комбинатор
15930
Комбинатор 2013.02.11 09:17  
Так это, что может быть проще -- если значение меньше предыдущего, сбрасываем подсчет и начинаем заново. Так и делаю.
Igor Kim
2741
Igor Kim 2013.02.11 14:18  
TheXpert:
Так это, что может быть проще -- если значение меньше предыдущего, сбрасываем подсчет и начинаем заново. Так и делаю.
Как это Вы так делаете? Систем ребут что-ли?
Комбинатор
15930
Комбинатор 2013.02.11 14:21  
KimIV:
Как это Вы так делаете? Систем ребут что-ли?
Учитываю в коде возможность переполнения.
Alexey Navoykov
3988
Alexey Navoykov 2013.02.11 15:49  
KimIV:
У меня недавно была ситуация с переполнением. Функция GetTickCount() возвращала отрицательное целое большое число... Перезагрузил компьютер... Сейчас жалею. Нужно было отследить модуль этого числа, то есть значение после обработки функцией MathAbs(). Если бы оно наращивалось, то можно было бы всегда брать значение MathAbs(GetTickCount()) и не бояться переполнения.

Не, модуль наоборот станет уменьшатся (т.е. отрицательное число будет идти в сторону нуля), MQL ведь воспринимает его именно как signed int, а не DWORD.  Поэтому одним лишь модулем тут не отделаешься. 

Комбинатор
15930
Комбинатор 2013.02.11 15:56  
Meat:

Не, модуль наоборот станет уменьшатся (т.е. отрицательное число будет идти в сторону нуля). Поэтому одним лишь модулем тут не отделаешься. 

Так наоборот проще, имхо

Vadim Zhunko
5227
Vadim Zhunko 2013.02.11 16:14  
KimIV:
У меня недавно была ситуация с переполнением. Функция GetTickCount() возвращала отрицательное целое большое число... Перезагрузил компьютер... Сейчас жалею. Нужно было отследить модуль этого числа, то есть значение после обработки функцией MathAbs(). Если бы оно наращивалось, то можно было бы всегда брать значение MathAbs(GetTickCount()) и не бояться переполнения.

GetTickCount() оболочка этой функции WinAPI. Она возвращает тип DWORD. Т.е. в MQL4 она "переполняется", как бы на полпути. Из-за того, что в MQL4 нет беззнаковых типов.

Можно разбить INT на две части с помощью побитовых операций. Младший WORD и старший WORD. Они при своём переполнении не будут переполнять свой INT. Отслеживать обе части.

Alexey Subbotin
4998
Alexey Subbotin 2013.02.11 16:46  

Проще наверное, просто считать в дополнительном коде...

PS Большое отрицательное число - это еще не переполнение, просто в старший разрад попала единичка. То есть до переполнения еще полпути.

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий