Форум: "Основная";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
ВнизКак отловить одновременно два события Найти похожие ветки
← →
Ка (2005-08-12 11:36) [0]В программе необходимо реализовать, что бы определённый код, выполнялся только если одновременно произойдёт два события причём у разных компонентов. Как можно одновременно отловить два события ?
← →
KilkennyCat © (2005-08-12 11:44) [1]В теории, если они меняют какой-то бит в памяти (каждое - свой) то логическое сравнение позволяет отловить их одновременно.
← →
KilkennyCat © (2005-08-12 11:47) [2]А вообще - два потока и один флаг. Первый компонент в своем потоке по событию изменяет состояние флага, второй в своем потоке по своему событию проверяет состояние флага. При совпадении - можно считать, с определенной погрешностью, что получилось одновременно.
← →
vrem (2005-08-12 11:48) [3]одновременно отловить <> одновременно произошли
определить сколько это в мсек - "одновременно", сравнивать
← →
pasha_golub © (2005-08-12 11:55) [4]
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;
← →
Digitman © (2005-08-12 12:06) [5]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 12:11) [6]Digitman © (12.08.05 12:06) [5]
Мощно! Уважаю!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.09.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c