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

Вниз

не срабатывает обработчик   Найти похожие ветки 

 
Olexander   (2003-09-11 11:21) [0]

Привет Мастерам!

Пытаюсь включить в доп. поток Asynch Pro.
Не срабатывает триггер на прием.
В чем может быть ошибочка ?

type
TRWthread = class(TThread)
apd1 : TApdcomport;
constructor create(s : boolean);
procedure ApdComPort1TriggerAvail(CP : TObject; Count : Word);
...
end;

procedure TRWthread.ApdComPort1TriggerAvail(CP : TObject; Count : Word);
begin
showmessage("data received");
end;

constructor TRWthread.create(s : boolean);
begin
inherited create(s);
apd1 := TApdcomport.Create(nil);
apd1.ComNumber := 1;
apd1.Baud := 1200;
apd1.Parity := pNone;
apd1.StopBits := 2;
apd1.OnTriggerAvail := ApdComPort1TriggerAvail;
end;

procedure TRWthread.Execute;
begin
apd1.DTR := true;
while not terminated do
begin
apd1.RTS := true;
sendCommand(RandomCommand);
apd1.RTS := false;
sleep(400);
end;
end;



 
Reindeer Moss Eater ©   (2003-09-11 11:22) [1]

Тебе вчера про возможные баяны с потоками и APro рассказывали довольно много слов и букв


 
Reindeer Moss Eater ©   (2003-09-11 11:28) [2]

И где у тебя в коде создание самого триггера?


 
Reindeer Moss Eater ©   (2003-09-11 11:44) [3]

Если попробовать разглядеть полет мысли в приведенном коде, то возникнет вопрос: а зачем вторичный поток здесь вообще нужен?

Приходящие данные обрабатываются событийно. Исходящие данные уходят периодически с постоянным интервалом.
Зачем второй поток - не могу понять.


 
Olexander   (2003-09-11 11:48) [4]

Хм...


 
Reindeer Moss Eater ©   (2003-09-11 11:51) [5]

скорее х.з.


 
Olexander   (2003-09-11 11:53) [6]

В перспективе все должно быть немного сложнее.
Мысля летела так:
Послали команду - следующую не посылаем пока не дождемся ответа.

procedure TRWthread.Execute;
begin
...
sendCommand(RandomCommand);
apd1.RTS := false;
Suspend;
end;

procedure TRWthread.ApdComPort1TriggerAvail(CP : TObject; Count : Word);
begin
if ReadCommand then
Resume;
end;



До поток - для того чтобы не вешать основной, отвечать на действия пользователя.


 
Olexander   (2003-09-11 11:53) [7]

В перспективе все должно быть немного сложнее.
Мысля летела так:
Послали команду - следующую не посылаем пока не дождемся ответа.

procedure TRWthread.Execute;
begin
...
sendCommand(RandomCommand);
apd1.RTS := false;
Suspend;
end;

procedure TRWthread.ApdComPort1TriggerAvail(CP : TObject; Count : Word);
begin
if ReadCommand then
Resume;
end;



До поток - для того чтобы не вешать основной, отвечать на действия пользователя.


 
Reindeer Moss Eater ©   (2003-09-11 11:56) [8]

Мысля летела так:
Послали команду - следующую не посылаем пока не дождемся ответа.


Ну и наздоровье. Есть события OnTrigger...
Лови ответ в обработчике, после чего шли снова.

До поток - для того чтобы не вешать основной, отвечать на действия пользователя.

А как ApdComPort может вешать основной поток? Ну сильнее чем скажем TButton?


 
Olexander   (2003-09-11 12:01) [9]

надо подумать...



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

Текущий архив: 2003.09.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
1-71584
РоманСин
2003-09-11 15:33
2003.09.22
Как переконвертировать pdf- или ps-файл в операторы Delphi?


4-72013
Prov
2003-07-21 10:26
2003.09.22
Загрузить текст


14-71894
Igorek
2003-08-06 09:30
2003.09.22
---|Ветка была без названия|---


3-71557
AlexA
2003-08-29 10:19
2003.09.22
Использование триггеров


3-71488
Жорж
2003-09-01 16:34
2003.09.22
Базы данных