有详细得代码介绍!请教+探讨TIDUDPServer多线程处理得问题,非常急啊,严重丢数据!up有分
下面我说一下我的问题:
由于做得视频处理,所以包如果丢了,就显示不了数据了!
大家先看一下这个我设计得多线程类!
void __fastcall TUDPThread::Execute()
{
idUDPS->Active = true;
while(Runed && idUDPS->Active){
try{
try{
idUDPS->OnUDPRead = RecvPacket;
}catch(Exception &E){
Server->cs->Enter();
Server->log->WriteLog1("Error1");
Server->cs->Leave();
}
}
__finally{
}
if (!Runed)
break;
else{
Sleep((unsigned long)1);
}
}
}
//---------------------------------------------------------------------------
__fastcall TUDPThread::TUDPThread(TIdUDPServer * idUDPB, bool CreateSuspended)
: TThread(CreateSuspended)
{
idUDPS = idUDPB;
Runed = true;
}
__fastcall TUDPThread::~TUDPThread()
{
}
void __fastcall TUDPThread::RecvPacket(System::TObject* Sender, Classes::TStream* AData, Idsockethandle::TIdSocketHandle* ABinding){
char *bufData = new char[MaxSize];
memset(bufData,0,MaxSize);
int r = AData->Size;
AData->Read(bufData,r);
Server->log->WriteLog1("TUDPThread GetPackage ....................");
TVideoMemroyBlock *vmb = new TVideoMemroyBlock(bufData,r);
Server->cs->Enter();
Server->pVideoMBListV[0].push_back(vmb);
Server->cs->Leave();
delete []bufData;
}
这是处理线程
class TUDPThread : public TThread
{
private:
volatile bool Runed;
protected:
void __fastcall Execute();
public:
//char *bufData;
TIdUDPServer *idUDPS;
__fastcall TUDPThread(TIdUDPServer * idUDPB, bool CreateSuspended);
__fastcall ~TUDPThread();
__fastcall TUDPThread(bool CreateSuspended);
void __fastcall RecvPacket(System::TObject* Sender, Classes::TStream* AData, Idsockethandle::TIdSocketHandle* ABinding);
};
这是定义!
下面是我得问题:
服务器在接收包得时候,一切正常,但是
大家请注意
Sleep((unsigned long)1);这一句语句导致了我检测数据得时候
发现丢了大概3个包,!
我得问题:
想请教大家这里应该如何设计
才能保证不丢包!
我开始想
不用Sleep((unsigned long)1);
而使用this->Suspend();
但是问题也来了,挂起以后,谁来唤醒她?
征集好得解决方法或者思路,只要能够解决问题,分不是问题!
可以再开贴!非常着集!
再次感谢!