![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить одновременно два события [D7, WinXP]
Ка © (2005-08-12 11:36:00)В программе необходимо реализовать, что бы определённый код, выполнялся только если одновременно произойдёт два события причём у разных компонентов. Как можно одновременно отловить два события ?
pasha_golub (2005-08-12 12:11:00) [1]Digitman © (12.08.05 12:06) [5]
Мощно! Уважаю!
Digitman (2005-08-12 12:06:00) [2]var
hEvents: array[0..1] of THandle;
..
hEvents[0] := CreateEvent(nil, True, False, nil);
hEvents[1] := CreateEvent(nil, True, False, nil);
..
while not Application.Terminated do
case MsgWaitForMultipleObjects(2, hEvents, True, INFINITE, QS_ALLINPUT) of
WAIT_OBJECT_0: begin
ResetEvent(hEvents[0]);
ResetEvent(hEvents[1]);
SendMessage('На сей момент произошли Исобытие 0 Исобытие 1 !')ж
break;
end;
WAIT_OBJECT_0 + 2: Application.ProcessMessages;
...
procedure TForm1.SomeEventHandler0(..);
begin
SetEvent(hEvents[0]);
end;
procedure TForm1.SomeEventHandler0(..);
begin
SetEvent(hEvents[1]);
end;
pasha_golub (2005-08-12 11:55:00) [3]
Var EventFlag: boolean
EventTime: cardinal;
const Epsilon = 100000;
procedure TForm1.Button1Click(Sender: TObject);
begin
EventFlag := True;
EventTime:= GetTickCount;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
If EventFlag and (GetTickCount - EventTime <= Epsilon) then
begin
EventFlag := False;
DoMyStuff;
end;
end;
vrem (2005-08-12 11:48:00) [4]одновременно отловить <> одновременно произошли
определить сколько это в мсек - "одновременно", сравнивать
KilkennyCat (2005-08-12 11:47:00) [5]А вообще - два потока и один флаг. Первый компонент в своем потоке по событию изменяет состояние флага, второй в своем потоке по своему событию проверяет состояние флага. При совпадении - можно считать, с определенной погрешностью, что получилось одновременно.
KilkennyCat (2005-08-12 11:44:00) [6]В теории, если они меняют какой-то бит в памяти (каждое - свой) то логическое сравнение позволяет отловить их одновременно.