Форум: "WinAPI";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
ВнизSetWaitableTimer не срабатывает Найти похожие ветки
← →
kuzulis © (2008-03-17 10:21) [0]Доброго времени суток..
У меня почему - то при истечении времени не вызывается процедура обработки в таймере....
:(
код
-----------------
var
term :BOOL;
delay :int64;
tid:dword;
hTimer :THandle;
procedure TimerAPCProc(
lpArgToCompletionRoutine: Pointer; // данные
dwTimerLowValue: DWORD; // младшие 32 разряда значения таймера
dwTimerHighValue: DWORD // старшие 32 разряда значения таймера
);
begin
MessageBox(0,"Ямлять сработал","",MB_OK);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
delay:=-20000000;
hTimer:=CreateWaitableTimer(nil,false,nil);
if SetWaitableTimer(hTimer,delay,0,@TimerAPCProc,nil,false) then
MessageBox(0,"SetWaitableTimer OK","",MB_OK);
end;
------------
помогите разобраться пожалуйста!!!
← →
kuzulis © (2008-03-17 10:24) [1]искал по поиску.. нашел это:
http://delphimaster.net/view/4-1193654690/
но все-равно не понял .. :(
← →
kuzulis © (2008-03-17 10:56) [2]т.е понял.... но мне не нужна еще одна задержка SleepEX !!!! (не упиралась)
мне нада например чтобы после SetWaitableTimer стали выполняться следующие операторы без задержки SleepEx .....
Мне костыль этот не нужен!!!
← →
Slym © (2008-03-17 12:45) [3]APC выполняется в томже потоке, а он у тебя занят "основной" деятельностью... чтобы выполнилась очередь APC поток должен "уснуть" на блорирующем ожидании(WaitFor)/вводе/выводе, SleepEx и т.д. и т.п.
← →
Сергей М. © (2008-03-17 12:46) [4]
> мне не нужна еще одна задержка SleepEX
Не нужна - не порльзуй. Всех делов-то)
> мне нада например чтобы после SetWaitableTimer стали выполняться
> следующие операторы без задержки SleepEx
Оно так и будет, даже не сомневайся.
Тем более что никакими SleepEx в твоем коде даже не пахнет - ни до ни после SetWaitableTimer.
И вообще - твоя "Ямлять"-процедура должна иметь соглашение о вызове stdcall.
← →
Slym © (2008-03-17 12:51) [5]Вообще какая цель? Нужен ли тебе этот Waitable и APC можно его на обычный таймер заменить
← →
Slym © (2008-03-17 12:52) [6]kuzulis © (17.03.08 10:56) [2]
SetWaitableTimer стали выполняться следующие операторы без задержки SleepEx
тагда отдельный паток :)
← →
Антон (2008-10-04 16:12) [7]TimerAPCProc вызывается из того потока, который обратился к SetWaitableTimer в момент срабаты вания таймера, — но только если вызывающий поток находится в "тревожном" (aler table) состоянии, т. e. ожидает этого в вызове одной из функций SleepEx, WaitForSingle ObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx или SignalObjectAndWait Если же поток этого не ожидает в любой из перечисленных функций, система не поставит в очередь АРС-функцию таймера. Тем самым система не даст АРС-очереди потока переполниться уведомлениями от таймера, которые могли бы впустую израсходовать колоссальный объем памяти.
Если в момент срабатывания таймера Ваш поток находится в одной из перечис ленных ранее функций, система заставляет его вызвать процедуру обратного вызова Первый ее параметр совпадает с параметром pvArgToCompletionRoutine, передаваемым в функцию SetWaitableTimer, Это позволяет передавать в TimerAPCRoutine какие-либо данные (обычно указатель на определенную Вами структуру) Остальные два парамет ра, dwTimerLowValue и dwTimerHighValue, задают время срабатывания таймера.
я сделал так.... у меня работает
procedure TimerAPCProc(lpArgToCompletionRoutine: Pointer;dwTimerLowValue: DWORD;
dwTimerHighValue: DWORD); stdcall;
begin
MessageBox(0,"Ямлять сработал","",MB_OK);
end;
procedure ThProc(p:Pointer);stdcall;
var
WTimer:TWaitableTimer;//Класс для передачи параметров в поток
begin
WTimer:=TWaitableTimer(P);
with WTimer do
begin
SetWaitableTimer(FHandle,FLongTime,FPeriod,@TimerAPCProc,p, False);
while (FHandle<>0) and (not Application.Terminated) and (not FTerminated) do
begin
SleepEx(INFINITE,True);
end;
end;
end;
procedure TWaitableTimer.Start;
var
ThreadID: DWORD;
begin
HThread:=CreateThread(nil,256,@ThProc,Self,0,ThreadID);
end;
з.ы. Читайте Рихтера, там всё написанно
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c