Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с системным таймером

29K
14 мая 2008 года
John Paramol
22 / / 08.04.2008
Здравствуйте.
У меня наблюдается чрезвычайно странный глюк.
Вот простейший код (форма с таймером):

 
Код:
static DWORD TStart=GetTickCount();
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Canvas->TextOut(0,0, ::GetTickCount() - TStart );
}
//---------------------------------------------------------------------------


Через какие-то неравные промежутки времени инкрементирование числа останавливается и висит в таком положении какие-то доли секунды, потом опять продолжается. Причем, без скачка.
Я бы мог подумать, что это виснет моя программа, но раз используется системный таймер, то, получается, это он тормозит. Т.е. у меня весь компьютер виснет на какие-то доли секунды вместе с системным таймером (страшная вещь). Но если бы это было так, мои часы (те, что в трее) постепенно начинали бы отставать, но они идут исправно.

Подскажите, пожалуйста, в чем может быть проблема, у меня голова уже не варит.
16K
15 мая 2008 года
Alfá
59 / / 12.01.2007
И на сколько большие эти участки времени? Из представленного не видно как часто происходит обновление, но этого и не надо. Видать, "подтормаживает" при попадании GetTickCount в тот момент, когда происходит обновление времени.
29K
15 мая 2008 года
John Paramol
22 / / 08.04.2008
тормозит на ~400-1000 мс через каждые ~5-15 секунд

нет, тормоза даже до 2 секунд продолжаются иногда
16K
15 мая 2008 года
Alfá
59 / / 12.01.2007
Цитата: John Paramol
Здравствуйте.
Я бы мог подумать, что это виснет моя программа...

А что же еще виснит?

Цитата: John Paramol

но раз используется системный таймер, то, получается, это он тормозит.

GetTickCount выдает кол-во милисекунд. Это не таймер. А если используешь таймер, то, возможно, и не успевает обновиться Canvas.

29K
15 мая 2008 года
John Paramol
22 / / 08.04.2008
[QUOTE=Alfá;245232]А что же еще виснит?[/QUOTE]
Это не может виснуть моя программа т.к.:
1) сообщения таймера все равно скапливаются в очередь и рано или поздно будут обработаны (переполнение очереди сообщений не будем считать).
2) если некоторые из сообщений все же были пропущены и/или последующие сообщения обрабатываются не в то время (например, на секунду позже), это бы порождало скачок числа (равный по длине времени подвисания), т.к. вызывается GetTickCount, т.е. нет привязки к количеству вызовов обработчика таймера.
[QUOTE=Alfá;245232]GetTickCount выдает кол-во милисекунд. Это не таймер.[/QUOTE]
Я понимаю, это не суть важно
[QUOTE=Alfá;245232]А если используешь таймер, то, возможно, и не успевает обновиться Canvas.[/QUOTE]
опять же, после каждого такого торможения канвы, был бы скачок.
А так получается, что с течением времени копится все бОльшая и бОльшая задержка. Кто знает, может через сутки она составит пару часов...
29K
15 мая 2008 года
John Paramol
22 / / 08.04.2008
Такое ощущение, что это черая магия, или у меня подвисают системные часы...
Но часы не могут подвисать, а в магию я не верю...

Все, надо поспать немного. Глядишь, утром чего придумается. Вот из-за такого гавна у меня большая работа встала
29K
15 мая 2008 года
John Paramol
22 / / 08.04.2008
Похоже, сегодня утром проблема исчезла. Сама собой. Стало быть, проблема была именно в системных часах. Не в функции GetTickCount, потому что я пробовал использовать GetSystemTime/GetLocalTime - проблема оставалась. Но почему тогда мои часы в трее не отставали?
В любом случае, пока проблема снова не появится, я беспокоиться не буду. Ну а если появится снова, еще напишу.


Рано обрадовался, опять началось...
Такое ощущение, что компьютер отдохнул ночью, потом поработал нормально и снова начал тормозить. Но часы в трее не отстают - вот парадокс.
Может, есть другие способы узнать время кроме GetTickCount/GetSystemTime/GetLocalTime?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог