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

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

Не срабатывает SetWaitableTimer. [D7, XP]


Страницы:   1 2 3

Б ©   (2010-04-15 12:18:00) 

Здрасти!

Почему не срабатывает SetWaitableTimer?
Будильник должен включиться ровно через 1 минуту после запуска.


Var
 HTIMER  : LongWord;
 TimeSys : TSystemTime;
 TimeFile: TFileTime;

Procedure TimerAPCProc(lpArgToCompletionRoutine: Pointer; dwTimerLowValue, dwTimerHighValue: DWORD); stdcall;
begin
 MessageBox(0, 'Wake Up!', '!', MB_OK or MB_ICONERROR);
End;

Procedure XRunTimer(Hour, Minute: word);
begin
 HTIMER:= CreateWaitableTimer(nil, False, nil);
 If (HTIMER = 0) then
 begin
   MessageBox(0, 'No create timer!', '!', MB_OK or MB_ICONERROR);
   Exit;
 end;

 GetLocalTime(TimeSys);                 // Текущая дата и время.
 TimeSys.wMinute:= TimeSys.wMinute + 1; // Должен сработать через 1 минуту.
 (*
 With TimeSys do
 begin
   wHour  := Hour;
   wMinute:= Minute;
 end;
 *)

 Win32Check(SystemTimeToFileTime(TimeSys, TimeFile));
 Win32Check(SetWaitableTimer(HTIMER, INT64(TimeFile), 0, @TimerAPCProc, nil, False));
End;

procedure TForm1.FormCreate(Sender: TObject);
begin
 XRunTimer(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 CloseHandle(HTIMER);
end;


Leonid Troyanovsky   (2010-04-15 13:14:00) [41]


> Б   (15.04.10 13:00) [4]

> Только я не понял, почему мой пример не работает без SleepEx.

http://msdn.microsoft.com/en-us/library/ms686898(VS.85).aspx

--
Regards, LVT.


Anatoly Podgoretsky   (2010-04-15 13:13:00) [42]

> Б  (15.04.2010 12:35:02)  [2]

За RaiseLastOSError тебе сисадмины будут ноги целовать, а за твое самоувереное морду бить.


Б   (2010-04-15 13:00:00) [43]


> Leonid Troyanovsky ©   (15.04.10 12:47) [3]

Спасибо за пример.

Только я не понял, почему мой пример не работает без SleepEx.
С ним приложение зависает.
Как этого избежать?


Leonid Troyanovsky   (2010-04-15 12:47:00) [44]


> Б   (15.04.10 12:18)  

> Почему не срабатывает SetWaitableTimer?
> Будильник должен включиться ровно через 1 минуту после запуска.

http://rsdn.ru/forum/delphi/804841.1.aspx

--
Regards, LVT.


Б   (2010-04-15 12:35:00) [45]

А какая тут разница?
RaiseLastOSError или MessageBox.


Anatoly Podgoretsky   (2010-04-15 12:31:00) [46]

> Б  (15.04.2010 12:18:00)  [0]

Где обработка ошибки, а не это позорное "MessageBox(0, 'No create timer!',"


Страницы:   1 2 3

Наверх

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