На нескольких компьютерах с Windows я видел, что два следующих друг за другом вызова ::GetTickCount() возвращают разницу в 1610619236 мс (около 18 дней). Это не из-за несоответствия og int/unsigned int. Я использую Visual C++ 2015/2017.
Кто-нибудь еще видел такое поведение? У кого-нибудь есть идеи о том, что может вызвать такое поведение?
С уважением, Джон
Пример кода, показывающий ошибку:
class CLTemp
{
DWORD nLastCheck;
CLTemp()
{
nLastCheck=::GetTickCount();
}
//Service is called every 200ms by a timer
void Service()
{
if( ::GetTickCount() - nLastCheck > 20000 )//check every 20 sec
{
//On some Windows machines, after an uptime of 776 days, the
//::GetTickCount() - nLastCheck gives a value of 1610619236
//(corresponding to around 18 days)
nLastCheck = ::GetTickCount();
}
}
};
GetTickCount64()
. Тем не менее, я знаком с некоторыми средами антианализа, которые обманывают значение. - person Petesh   schedule 23.10.2020function_that_is_called_every_500ms () ... if( ::GetTickCount() - dwLastInfoSend > dwInfoSendInterval ) ) { //Do something dwLastInfoSend = ::GetTickCount(); } ...
Мы очень редко видели в работающих системах, что::GetTickCount() - dwLastInfoSend = ~18 days
. Это в системе, которая работает уже 2 года. - person rauhe   schedule 23.10.20200x60000000
, вероятно, какая-то ошибка переноса, особенно если ваш компьютер работает уже 2 года, предоставьте минимально воспроизводимый пример - person Alan Birtles   schedule 23.10.2020GetTickCount
не очень надежен и не должен использоваться для чего-то важного) - person Alan Birtles   schedule 26.10.2020GetTickCount
, а не, например, из-за некоторого повреждения памяти, которое может привести к поломкеnLastCheck
? - person dxiv   schedule 26.10.2020