- 论坛徽章:
- 0
|
STL自己的函数也会出错!!?
B线程中关于这段的代码
readysend=HandleMsgFunc1(recvbuffer.c_str()); // readysend是string全局变量
if(!readsend.empty())
{
handledqueue.push(readsend);
SetEvent(SendEvent);
}
A线程:
while(WAIT_OBJECT_0 == WaitForSingleObject(m_hHandleEvent,INFINITE))
{
while(!sendqueue.empty())
{
try
{
string &tempbuf = handlequeue.front();
}
catch (...)
{
MessageBox(0,"handlequeue.front()存在问题",0,0);
}
....
handledqueue.pop();
ResetEvent(sendevent);
}
B线程是从网络接受来的消息进行处理后放进一个已处理队列,
A线程负责从这个已处理队列中取出元素来发送到网络。
压力测试:做一个工具,死循环发送100字节的随机内容的包给接受的服务器,中途不sleep,但只有从网络受到回复才做下一次发送,也就是说接受和发送是阻塞的。一个工具一秒大约能收发共500-1000条消息;服务器端只是把收到的包简单作了一个回复。结果发现,当同时开几个工具一起向一台服务器发送的时候,出现问题,问题就出在STL 的队列front()函数!但抛出异常的时间不等,有的时候30秒,有的时候1,2分钟,但不超过3分钟,一般开3-4个压力工具就出现问题。 |
|