Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.04;
Скачать: CL | DM;

Вниз

Как отловить одновременно два события   Найти похожие ветки 

 
Ка   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
2-1061967116
Help
2003-08-27 10:51
2005.09.04
Узнать


3-1122040445
sergg
2005-07-22 17:54
2005.09.04
Можно ли просматривать содержимое полей типа Memo в DBGide?


4-1121589578
Arc
2005-07-17 12:39
2005.09.04
Локальный хук на WM_SETTEXT


3-1122181557
Алексей Петухов
2005-07-24 09:05
2005.09.04
Копия TDatabase


10-1101387508
Hinka
2004-11-25 15:58
2005.09.04
понятие интерфейсов