Главная страница
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.036 c
1-1124015109
Ви талька 2005
2005-08-14 14:25
2005.09.04
Прозрачный фрейм


14-1123759060
Игорь Лан
2005-08-11 15:17
2005.09.04
Посоветуйте где найти компонент


14-1123683162
Kerk
2005-08-10 18:12
2005.09.04
Абрамович предложил своим футболистам отдохнуть на Чукотке


9-1115476689
grouzd[E]v
2005-05-07 18:38
2005.09.04
OpenGL - Стереометрия, мать ее!


14-1123941755
darvin
2005-08-13 18:02
2005.09.04
Компонент - древовидный список