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

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

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

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

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

[identity profile] themech.livejournal.com 2007-07-11 11:02 am (UTC)(link)
это только старые программисты при имеющихся сейчас в наличии безумных объемах памяти экономят 2 байти на переменной? светлая память о 640 кБ ОЗУ? ;-)

[identity profile] metaclass.livejournal.com 2007-07-11 12:21 pm (UTC)(link)
4 байта переменной с микросекундами. Винда так возвращает. 49 дней период, если целиком все диапазон, а если до минуса просто дожидаться - то и 24 дня.

[identity profile] themech.livejournal.com 2007-07-11 01:25 pm (UTC)(link)
все понятно. в микрософте никогда не предполагали что винда может работать более 24 дней без перезагрузки ;-)