在使用tcpip瞬时回接多个消息时如何使用多线程 ( 积分: 100 )

  • 主题发起人 主题发起人 Delx
  • 开始时间 开始时间
D

Delx

Unregistered / Unconfirmed
GUEST, unregistred user!
在接收消息事件中,将接收到的消息进行拆串等操作,我想将该操作置于多线程中,
但在很短的时间内接收消息事件将接收若干个消息(接收多个消息间隔很短,造成有的消息丢失)。我在编程时不能达到理想的效果
在接受消息时的事件如下(简)
OnAccept:
var
RecMsg: string;
begin
RecMsg:=ClientSoket......
TempThread:=TTempThread.Create(True);
TempThread.TempRecMsg:=RecMsg;
TempThread.Resume;
end;
其中TempThread 为我定义的县城tempRecMsg是线程中的变量。
具体的拆串步骤在线程事件中完成,但由于接收消息间隔很短,有的消息没由得到处理,
造成丢失,我想可能是我的方法有问题!
请高手赐教!!!!!
请高手赐教!!!!!
请高手赐教!!!!!
 
在接收消息事件中,将接收到的消息进行拆串等操作,我想将该操作置于多线程中,
但在很短的时间内接收消息事件将接收若干个消息(接收多个消息间隔很短,造成有的消息丢失)。我在编程时不能达到理想的效果
在接受消息时的事件如下(简)
OnAccept:
var
RecMsg: string;
begin
RecMsg:=ClientSoket......
TempThread:=TTempThread.Create(True);
TempThread.TempRecMsg:=RecMsg;
TempThread.Resume;
end;
其中TempThread 为我定义的县城tempRecMsg是线程中的变量。
具体的拆串步骤在线程事件中完成,但由于接收消息间隔很短,有的消息没由得到处理,
造成丢失,我想可能是我的方法有问题!
请高手赐教!!!!!
请高手赐教!!!!!
请高手赐教!!!!!
 
有人会吗????????
请高手赐教!!!!!
请高手赐教!!!!!
请高手赐教!!!!!
 
不会,不过,消息应该保存在内存的一个区域里面,比如就简单的用字符串,然后一致累加,有消息来就累加,然后处理程序就从这个字符串读取,采用先进先先出的原则处理消息(理论化的叫法就是队列,俺们是粗人用字符串解决[:D]),这样就不会造成丢失了,个人看法
 
加个队列, 接收完只管往队列里扔. 线程则不断从队列里取出进行拆分. 这样就不会存在数据丢失了
 
不要每个消息都建立一个线程去处理,那样线程的建立和销毁就会损耗很多时间,对于高速需求来说,影响很大的。
建议两个线程工作,一个接收,一个处理,二者通过消息通讯,数据保存在公用缓冲区里面,如果这样还丢失数据或者出现缓冲区溢出,那么你该换台机器完成这个工作(性能不足)。
 
该怎样实现队列啊,不懂啊,谢谢
 
队列其实也就是一个数组,只是这个数组的大小基本是定了的,那么你的这些消息就存在数组里面了,如果满了要处理,那就从第一个开始取,后面的就填充到前边,比如取了第一个了,那么第二个的值就放在第一个里面,第三个的值就放在第二个里面,这样下去。其实用一个比喻来说就比如水管中的水一样,先进入水管中的水肯定是从水管的另外一头先出来,队列就是一头是负责进入,而另外一头负责出去。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
608
import
I
后退
顶部