Отличнейший баг
Откопал только что в проге сабж. Совершенно безумный.
Есть у меня в проге отображение прогресса для длинных операций. Чтобы его постоянно не обновлять, я вывожу изменения только через каждые 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)
(no subject)
no subject