Главная страница
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.017 c
7-71979
Игорь_1984
2003-07-09 11:41
2003.09.22
Как убить процесс, зная его имя?


1-71680
drakulita
2003-09-11 12:27
2003.09.22
Как заархевировать файлы?


1-71659
NiX
2003-09-08 17:35
2003.09.22
Доступ к свойству компонента


1-71648
A-DiL
2003-09-08 22:41
2003.09.22
Количество символов после запятой в Float(Real) переменной


3-71513
RusGrek
2003-09-01 09:46
2003.09.22
Создание новой таблицы FoxPro с помощью SQL - проблема размера