请问怎么样用多线程来处理如下问题 ( 积分: 47 )

  • 主题发起人 主题发起人 huanghuang612
  • 开始时间 开始时间
H

huanghuang612

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在在写一个串口通讯程序,采用SPCOMM控件,通过其的OnReceiveData事件来接收
串口的数据,
procedure TFrmMain.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
begin
SetLength(RecStr,BufferLength);
move(buffer^,pchar(@RecStr[1])^,bufferlength);
ProcessRecStr(RecStr);
//自定义的处理函数
end;

现在出现的问题如下:下位机往串口发送的频率为100次/秒,而完整处理一次
ProcessRecStr(RecStr)过程需要40毫秒,这样导致系统处于类似死机的繁忙状态,请
问该怎么进行多线程来做处理.以前没做过线程处理,不熟悉,请各位赐教.
 
你直接把你的整个串口的接收都写成多线程就可以了,这样就相当于在后台处理,不会出现界面死的现象。
 
能不能说得具体点
 
就算是多线程,也要考虑将接收的数据先放到一个接收数据队列中,这样,不同的线程就可以依次取该队列的第一个元素了.不过总感觉你的发送太快,处理太慢,是否有规律啊
 
接收到的数据都是有包头和包尾的,但每帧的长度不一样
 
我也在做类似的,用线程来单独负责数据接收就可以了,把串口传递到线程里面来。
 
不要忘了使用队列、线性表等数据结构哟。
与通信过程结合起来使用。
 
开个线程接收数据,收到放个链表中,发事件或消息通知处理,
 
后退
顶部