Главная страница
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.039 c
14-71871
Skier
2003-09-02 16:33
2003.09.22
Есть ли переводы ошибок ?


1-71703
P0tia
2003-09-10 18:01
2003.09.22
Формы и как с ними бороться?


1-71638
Razorblade
2003-09-08 09:18
2003.09.22
Проверка откр. / закр. тага в таблицах HTML...


14-71959
int64
2003-09-02 12:45
2003.09.22
Загадка. Простая такая.


1-71677
AlexDBases
2003-09-11 13:32
2003.09.22
Insert bitmap to richedit (TrxRichEdit)