Главная страница
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.024 c
6-1116700838
avtsasha
2005-05-21 22:40
2005.09.04
Выполнение php скриптов через делфю


14-1123221709
panov
2005-08-05 10:01
2005.09.04
О конференции "Начинающим"


9-1115537093
grouzd[E]v
2005-05-08 11:24
2005.09.04
OpenGL - LOD feat. Renderable


14-1123574910
Андрей Жук
2005-08-09 12:08
2005.09.04
Леонид Буряк отправлен в отставку!


1-1124041149
leonidus
2005-08-14 21:39
2005.09.04
Подскажите программу для выявления утечки памяти