Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WaitableTimer


Teapot ©   (2004-06-24 00:16:00) 

Кто-то может дать реально работающий пример использования WaitableTimer?

Уже все перечитал, и Help и MSDN, не могу понять как пользоваться этой штукой. С SetTimer разобрался, но мне нужен WaitableTimer.

Можете помочь пожалуйста?


Sapersky   (2004-07-28 12:31:00) [1]

Что, совсем никаких идей?
Рихтера почитал, но относительно возможных интервалов у него ничего нет... указывается только, что точность больше, чем у обычных таймеров.


Sapersky   (2004-07-26 12:42:00) [2]

Вот ещё по теме: почему-то в Win2000 устанавливается только кратный 15 мс интервал.

FTimer:=CreateWaitableTimer(nil, False, nil);

В начале и после каждой сработки:

NextInt:=20;
nInt64:= - Round(NextInt * 10000);
SetWaitableTimer(FTimer, nInt64, 0, nil, nil, False);

Если установить NextInt<=15, будет 15, иначе 30, 45 и т.д.
А мне вот нужно, например, 20.
Точнее, интервал предполагается динамически изменять (поэтому периодический таймер не подходит), но оно даже статически не ставится то, что нужно.
Измерение интервала делается QueryPerformanceCounter.


jack128   (2004-06-24 18:14:00) [3]


> GrayFace ©   (24.06.04 18:10)
> Дайте ссылку на Анатолия Подгорецкого.

я те в ветке про асм сказал и здесь повторю - в его анкету загляни


GrayFace   (2004-06-24 18:10:00) [4]

Дайте ссылку на Анатолия Подгорецкого.


Fay   (2004-06-24 13:09:00) [5]

2Тимохов ©   (24.06.04 10:29) [5]
Platform SDK достаточно 8)


Тимохов   (2004-06-24 10:29:00) [6]


> Teapot   (24.06.04 01:29) [3]

читай рихтера там все очень хорошо описано.

поищи 4ое издание в электронном виде. Я его видел в сети. Если не ошибаюсь на сайте Анатолия Подгорецкого.


Fay   (2004-06-24 06:40:00) [7]

Requirements
 Windows NT/2000/XP: Included in Windows NT 4.0 and later.
 Windows 95/98/Me: Included in Windows 98 and later.


Teapot   (2004-06-24 01:29:00) [8]


> jack128 ©   (24.06.04 00:45) [1]

Спасибо. буду разбираться....

В разных источниках написано по разному, то WaitableTimer работает в win98, а где-то написано что только под NT.

Кто то может сказать точно?


GuAV   (2004-06-24 01:08:00) [9]


>  if not SetWaitableTimer(hTimer, dieTime,
>        1000,  // а дальше будет срабатывать каждую секунду
>    nil, nil, False) then
>      RaiseLastWin32Error;

Win32Check(... )  :-P


jack128   (2004-06-24 00:45:00) [10]

 hTimer: THandle;
 dieTime: INt64;
 i: Integer;
begin
 hTimer := CreateWaitableTimer(nil, False, nil);
 if hTimer = 0 then
   RaiseLastWin32Error;
 try
   dieTime := -20000000; // первый раз таймер сработает через 2 сек (через 20000000 сто наносекундных интервалов)
   if not SetWaitableTimer(hTimer, dieTime,
       1000,  // а дальше будет срабатывать каждую секунду
   nil, nil, False) then
     RaiseLastWin32Error;
   for i := 0 to 10 do
     case WaitForSingleObject(hTimer, 11000) of // ждем срабытывания таймера
       WAIT_OBJECT_0: Memo1.Lines.Add('wait object');
       WAIT_TIMEOUT: Memo1.Lines.Add('Timeout');
       WAIT_ABANDONED: Memo1.Lines.Add('WAIT_ABANDONED');
     end;
   CancelWaitableTimer(hTimer); // Прекращает "тикание" таймера
 finally
   CloseHandle(hTimer);
 end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо