Отличнейший баг
Откопал только что в проге сабж. Совершенно безумный.
Есть у меня в проге отображение прогресса для длинных операций. Чтобы его постоянно не обновлять, я вывожу изменения только через каждые 0.3 секунды. А проверяю это дело, использую функцию GetTickCount, сохраняя ее предыдущее значение и сравнивая с текущим. Если разница >300 то прогресс обновляется.
Оказалось, что комп на работе не выключался столько, что GetTickCount стал меньше нуля (использовался integer). И сей алгоритм сломался, т.е. прогресс перестал показываться вообще. Дома показывается, тут нет.
Есть у меня в проге отображение прогресса для длинных операций. Чтобы его постоянно не обновлять, я вывожу изменения только через каждые 0.3 секунды. А проверяю это дело, использую функцию GetTickCount, сохраняя ее предыдущее значение и сравнивая с текущим. Если разница >300 то прогресс обновляется.
Оказалось, что комп на работе не выключался столько, что GetTickCount стал меньше нуля (использовался integer). И сей алгоритм сломался, т.е. прогресс перестал показываться вообще. Дома показывается, тут нет.
no subject
no subject
Результат DWORD-DWORD будет DWORD. Поэтому вычисление:
DWORD tstart = GetTickCount();
...
if ( ( GetTickCount() - tstart ) >= 300 ) ...
будет всегда нормально работать, даже, когда GetTickCount() перейдёт через ноль.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Поэтому, как справедливо заметил предыдущий оратор, if ((now - since) > 300) - работает всегда.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
кстати, по реквирементс оно тока на висте поедет, не считая самописного варианта с исходников ру
ну можно еще GetSystemTimes юзать. или еще что-нибудь более сложное, чтоб этот баг затмили другие.
no subject
Недавно боролся с глюками одной роботизированной хрени.
Там время мерили GetTickCount.
Вот табличка замера времени выполнения Sleep(100) GetTickCount против QueryPerformanceCounter
GetTickCount: 94 ms QPC: 100.246 ms
GetTickCount: 110 ms QPC: 100.173 ms
GetTickCount: 93 ms QPC: 100.156 ms
GetTickCount: 110 ms QPC: 100.281 ms
GetTickCount: 93 ms QPC: 100.083 ms
GetTickCount: 110 ms QPC: 100.127 ms
GetTickCount: 94 ms QPC: 99.7211 ms
no subject