Главная страница
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.015 c
4-72011
Marat VG
2003-07-21 12:23
2003.09.22
CopyFile


6-71797
servs
2003-07-21 12:08
2003.09.22
WebBrowser и History


1-71675
Pavel Oliynik
2003-09-11 11:28
2003.09.22
подстановку label.caption из ресурса по название лейбела


3-71532
Relaxxx
2003-08-29 10:30
2003.09.22
Footer у DBGridEh


4-72005
-Shurik-
2003-07-18 13:17
2003.09.22
Перехват оконных сообщений