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

Вниз

Работа с TEvent в однопоточном приложении   Найти похожие ветки 

 
Steeks ©   (2003-06-03 16:15) [0]

Возникла следующая проблема:
есть функция, которая должна возвратить некоторое значение, причем это значение должно зависить от совершенно постороннего события или его отсутствия. Например в приложении создан событийный ClientSocket. Событие от него может возникнуть в любой момент времени. Я вхожу в функцию, в которой в течении определенного времени ожидаю события от сокета, и в зависимости от этого возвращаю из функции то или ино значение. Все это легко реализуется в многопоточном приложении, однако как быть если приложение однопоточное?


 
Digitman ©   (2003-06-03 16:19) [1]


> Все это легко реализуется в многопоточном приложении, однако
> как быть если приложение однопоточное?


А какая разница ? И в чем, по-твоему, сложность возникает ?


 
Steeks ©   (2003-06-03 17:43) [2]

Сложность в том, что как мне приостановить выполнение функции до момента возникновения какого-либо события? В многопоточном приложении функцию можно вынести в отдельный поток, который можно приостановить до момента возникновения события.


 
Digitman ©   (2003-06-03 17:55) [3]

а функции ожидания на что ? [Msg]WaitFor... ?


 
Steeks ©   (2003-06-03 18:17) [4]

Если не трудно, можно поподробнее.


 
icWasya ©   (2003-06-03 18:33) [5]

while true do begin
if Application.Terminated then Break;
if {какоето условие на появление результата}then Break;
Application.ProcessMessages();
end;


 
Steeks ©   (2003-06-04 08:43) [6]

Не ну это не очень красиво....


 
Digitman ©   (2003-06-04 09:36) [7]

function WaitForEvent(Event: THandle): SomeType;
begin
WaitForSingleObject(Event, INFINITE);
Result := SomeValueOfResultType;
end;


 
icWasya ©   (2003-06-04 10:32) [8]

создать форму
на ней Label с текстом - "ждём события"
таймер и кнопка с текстом "Отменить" - по кнопке и таймеру прекращаем работу ClientSocket и закрываем форму с ModalResult - mrCansel
в обработчике события TEvent закрываем форму с ModalResult - mrOk

в процедуре - ShowModal и проверка ModalResult


 
Steeks ©   (2003-06-04 16:11) [9]

>Digitman: И все-таки, на сколько я понимаю, WaitForSingleObject приостанавливает выполнение потока (главного) до момента возникновения события. А что же мне делать, если возникновение события должно произойти в этом же (главном) потоке?


 
Digitman ©   (2003-06-04 16:24) [10]

тогда - MsgWaitForMultipleObjects

этот вызов одновременно ждет блок событий (не более 64) и неагирует на Win-сообщения



Страницы: 1 вся ветка

Текущий архив: 2003.06.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
3-50260
Belkova
2003-05-24 20:10
2003.06.16
Connection lost to database


14-50473
OMen
2003-05-28 16:15
2003.06.16
Следует ли покупать Delphi7???


7-50535
tararasyk
2003-04-12 12:01
2003.06.16
Как узнать зарегистрированный ли в системе ActiveX Automation Obj


1-50325
super_alex
2003-06-03 14:22
2003.06.16
Максимальный размер TImage


3-50245
Юлия
2003-05-24 09:01
2003.06.16
Поиск записей