metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2007-07-11 12:23 pm

Отличнейший баг

Откопал только что в проге сабж. Совершенно безумный.

Есть у меня в проге отображение прогресса для длинных операций. Чтобы его постоянно не обновлять, я вывожу изменения только через каждые 0.3 секунды. А проверяю это дело, использую функцию GetTickCount, сохраняя ее предыдущее значение и сравнивая с текущим. Если разница >300 то прогресс обновляется.

Оказалось, что комп на работе не выключался столько, что GetTickCount стал меньше нуля (использовался integer). И сей алгоритм сломался, т.е. прогресс перестал показываться вообще. Дома показывается, тут нет.

[identity profile] wlite.livejournal.com 2007-07-11 10:08 pm (UTC)(link)
угу :)
кстати, по реквирементс оно тока на висте поедет, не считая самописного варианта с исходников ру
ну можно еще GetSystemTimes юзать. или еще что-нибудь более сложное, чтоб этот баг затмили другие.

[identity profile] kkirsanov.livejournal.com 2007-07-11 10:16 pm (UTC)(link)
Кстати от таймерах.
Недавно боролся с глюками одной роботизированной хрени.
Там время мерили 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