Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1114339074
Pasha L
2005-04-24 14:37
2005.09.04
Как прочитать данные муз файла


14-1123448767
LoGeen
2005-08-08 01:06
2005.09.04
Пользование клиентом форума


14-1123488820
kblc
2005-08-08 12:13
2005.09.04
Compiler ...


2-1061967116
Help
2003-08-27 10:51
2005.09.04
Узнать


14-1123370803
Джо
2005-08-07 03:26
2005.09.04
Киевляне и гости столицы!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский