[请 教]关 于 spcomm 中 OnReceiveData 过 程 的 调 用 ( 积分: 50 )

  • 主题发起人 主题发起人 newtech
  • 开始时间 开始时间
N

newtech

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现如下功能:
有若干串数据要发送。

1 发送数据串1
2 等待返回,接受数据,然后处理数据
3 发送数据串2
4 等待返回,接受数据,然后处理数据
。。。
主要代码简要如下
procedure TForm1.BtnReadClick(Sender: TObject);
...
begin
//发送数据
if not comm1.WriteCommData(pchar(OutStr),length(OutStr)) then
begin
commflg := false;
end;
//接受数据
comm1.OnReceiveData := Comm1ReceiveData;
end

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
end;

我的用意是,在发送数据完成后,调用Comm1ReceiveData过程,此后回到原来procedure TForm1.BtnReadClick(Sender: TObject)。
但此时的问题是,在我执行procedure TForm1.BtnReadClick(Sender: TObject);后,没能触发OnReceiveData,而是等该过程全部结束,才跳到
Comm1ReceiveData,不知何故,望高人指点...
 
我想实现如下功能:
有若干串数据要发送。

1 发送数据串1
2 等待返回,接受数据,然后处理数据
3 发送数据串2
4 等待返回,接受数据,然后处理数据
。。。
主要代码简要如下
procedure TForm1.BtnReadClick(Sender: TObject);
...
begin
//发送数据
if not comm1.WriteCommData(pchar(OutStr),length(OutStr)) then
begin
commflg := false;
end;
//接受数据
comm1.OnReceiveData := Comm1ReceiveData;
end

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
begin
end;

我的用意是,在发送数据完成后,调用Comm1ReceiveData过程,此后回到原来procedure TForm1.BtnReadClick(Sender: TObject)。
但此时的问题是,在我执行procedure TForm1.BtnReadClick(Sender: TObject);后,没能触发OnReceiveData,而是等该过程全部结束,才跳到
Comm1ReceiveData,不知何故,望高人指点...
 
你的意思是不是发送串1后等待接收端对该串的处理,向本机发回一个信息后,再发送串2
 
需要串口的同步通信,但是Spcomm控件是读写线程分离的。
 
你的接收处理直接放在Comm1ReceiveData中不行吗?
 
后退
顶部