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

Вниз

Синронизация   Найти похожие ветки 

 
Raduga   (2004-03-25 10:37) [0]

Здравствуйте, Мастера.
Возникла следующая проблема:в процедуре посылаю команду модему, необходимо приостановить выполнение программы до получения отклика модема на команду или истечения таймаута. Как выполнить синхронизацию?
Для работы с com-портом использую компонент MS Comm Control.


 
Digitman ©   (2004-03-25 10:55) [1]


> необходимо приостановить выполнение программы


точнее, наверно, выполнение следующих операторов в том кодовом потоке, который осуществляет управление модемом

если ты "приостановишь" осн.код.поток, пользователь не сможет взаимодействовать с твоим приложением, поскольку осн.код.поток отвечает за обработку GUI-сообщений/событий

я не в курсе, что из себя представляет MS Comm Control, но,
вероятно, следует использовать его либо в синхронном режиме (вынося весь код управления компонентом в доп.код.поток), либо использовать какие-то имеющиеся у компонента события ввода/вывода, которые возбуждаются компонентом в асинхронном режиме работы с портом


 
Raduga   (2004-03-25 11:08) [2]

>точнее, наверно, выполнение следующих операторов в том кодовом >потоке, который осуществляет управление модемом
Я именно это имел ввиду.
Данный компонент работает в асинхронном режиме, у него есть событие генерируемые при поступлении символов в принимающий буфер, как приостановить выполнение следующих операторов, пока "не сработает" событие компонента.


 
Digitman ©   (2004-03-25 12:37) [3]

ну, наверно, что-то вроде этого :

var
 Buffer: String;
 WaitTime: Integer;

procedure SomeObject.TimerTick;
begin
 Dec(WaitTime);
end;

procedure TCommControl.OnRead(...);
begin
 Buffer := Read(..);
end;

...

Buffer := "";
TimeOut := 10;
CommControl.Send(..);
SomeObject.Timer.Enabled := True;

while (Buffer = "") and  (TimeOut > 0) do
 Application.ProcessMessages;

SomeObject.Timer.Enabled := False;

if TimeOut > 0 then
ShowMessage("Превышен тайм-аут ожидания ввода");
else
ShowMessage("Получены данные : " + Buffer);


 
Raduga   (2004-03-25 13:06) [4]

Я как раз и использую этот способ. Просто хотел узнать "альтернативные" методы.
Спасибо.



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

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.037 c
6-1075903292
Maksss
2004-02-04 17:01
2004.04.11
webbrowser


8-1071123168
alvin
2003-12-11 09:12
2004.04.11
Комментарии в JPEG


1-1079960435
Kupnu4
2004-03-22 16:00
2004.04.11
Как заставить картинку мигать?


1-1082308700
Relaxxx
2004-04-18 21:18
2004.04.11
Очень хочу нацчится делать коасивое меня, в стиле OfficeXP


3-1081937395
Vitaliy
2004-04-14 14:09
2004.04.11
Создание dbf таблицы через ADO





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