Форум: "Основная";
Текущий архив: 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