![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не срабатывает SetWaitableTimer. [D7, XP]
Б © (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!',"