Главная страница
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.062 c
14-1079864636
Chcnger
2004-03-21 13:23
2004.04.11
Динам. списки


7-1075801881
BKGG
2004-02-03 12:51
2004.04.11
Обьясните пожалуйста как Win запрешает выполнение Asm-ного коа In


14-1079338777
IceBeerg
2004-03-15 11:19
2004.04.11
Help! Комп не включается


1-1079627370
Gero
2004-03-18 19:29
2004.04.11
Неперекрывающееся окно


1-1082638763
han
2004-04-22 16:59
2004.04.11
Найти все окна в приложении