Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.16;
Скачать: [xml.tar.bz2];

Вниз

Работа с 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
1-50327
Maxx
2003-06-03 14:07
2003.06.16
Случайные числа


1-50372
zsv
2003-06-04 08:50
2003.06.16
Клавиша F1


14-50453
BJValentine
2003-05-29 12:02
2003.06.16
Версия программы


1-50311
borg
2003-06-02 06:19
2003.06.16
Кодирование


3-50223
softmaster
2003-05-25 18:19
2003.06.16
Трабл с FastReport





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский