我有N个线程,每个线程中都有一个缓冲区,一个临界区对象
TSendThread = class(TThread)
public
ThreadBuffer: array [0..ABSize - 1] of TUDPPacket; //缓冲区
FLock: TRTLCriticalSection;
end;SendThreadArray: array[0..N - 1] of TSendThread;主要操作有两个:
一、另一个线程TRecvThread主要负责接包处理
当接到包后,就会在N个线程的缓冲区中查找空闲位置,只要找到一个,就会把该线程的空闲位置设置下状态(有包);
二、另外接到的包,如果是确认包,还要在TSendThread线程的缓冲区中找到该块,并对其进行状态确认。请问。这些操作怎么写互斥呢?我写的,经过测试发现,当我的缓冲区中的每一个包都占满后就不会在发包了,也就是TSendThread中缓冲区的状态全是“有包”,从外面的接收线程中收到了包后,都没有被确认,TSendThread中缓冲区所有的空间都是“有包”状态。请问,上述两个操作的临界区代码怎么写呢。分不够可以再加,希望大家帮下我,急。在线等待。也可以通过QQ与我联系:6286357,验证:CSDN
TSendThread = class(TThread)
public
ThreadBuffer: array [0..ABSize - 1] of TUDPPacket; //缓冲区
FLock: TRTLCriticalSection;
end;SendThreadArray: array[0..N - 1] of TSendThread;主要操作有两个:
一、另一个线程TRecvThread主要负责接包处理
当接到包后,就会在N个线程的缓冲区中查找空闲位置,只要找到一个,就会把该线程的空闲位置设置下状态(有包);
二、另外接到的包,如果是确认包,还要在TSendThread线程的缓冲区中找到该块,并对其进行状态确认。请问。这些操作怎么写互斥呢?我写的,经过测试发现,当我的缓冲区中的每一个包都占满后就不会在发包了,也就是TSendThread中缓冲区的状态全是“有包”,从外面的接收线程中收到了包后,都没有被确认,TSendThread中缓冲区所有的空间都是“有包”状态。请问,上述两个操作的临界区代码怎么写呢。分不够可以再加,希望大家帮下我,急。在线等待。也可以通过QQ与我联系:6286357,验证:CSDN
如果存在 TSendThread 在处理第二次数据了,才收到第一次的回应,则,要增多一个信号,或者,增多一个状态变量
满了如何再发包呢?发包之后,你让这个包再那里接收呢?
方法:
多开线程来加快处理客户端的请求包,处理完就释放掉线程,再来接收新的请求.当然在此基础上还可以加个接收队列TQueue,来缓存发送请求,在一个线程里面push接收到请求包,在真正处理请求包的线程里面pop出来该请求并加以处理之.