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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.029 c
1-1082304018
Tack83
2004-04-18 20:00
2004.04.11
Главное меню. Alt-акселераторы.


1-1082609206
Вова_
2004-04-22 08:46
2004.04.11
Как спрятать курсор?


14-1079624431
nastojashij Kamerad
2004-03-18 18:40
2004.04.11
KAMERAD: "Я DELFI ПОЧЕНИЛ"!


11-1059205365
miek
2003-07-26 11:42
2004.04.11
Form.OnMessage


8-1076356910
Maksss
2004-02-09 23:01
2004.04.11
сходство в картинках