- 论坛徽章:
- 0
|
请教大家一个问题:
交易所行情业务场景: 服务器向客户端定时发送数据包,数据包格为: 包头 + 数据体 。 包头为字符串明文,数据体为FAST编码串。其中包头类似于:"8=FIX 9=VER 10=1523" ,包头中10=后面的内容用来表示数据体的数据大小(数据大小不固定)。客户端接收并解码。
问题: 使用两个线程处理时,会有 buffer is too small的现象,目前判断是临界锁影响了recv而导致,以下是客户端的接收线程的代码:
void recvMsg{
int recvbuflen = 512;
char recvbuf[512];
int iResult;
memset(recvbuf,0,sizeof(char)*512);
do {
iResult = recv(sockClient, recvbuf, recvbuflen, 0);
sRecStr.assign(recvbuf) ;
pMsgTexts.MsgText = sRecStr ;
EnterCriticalSection(&FMsgLock);
try
{
FMsgList.push_back(pMsgTexts);
FMsgCount++;
LeaveCriticalSection(&FMsgLock) ;
}
catch(...)
{
}
} while (iResult > 0);
}
以下是业务处理线程的代码
void proceMsg{
EnterCriticalSection(&FMsgLock);
if (!FMsgList.empty())
{
std::copy(FMsgList.begin(), FMsgList.end(), std::back_inserter(aList));
FMsgList.clear();
}
LeaveCriticalSection(&FMsgLock);
if (aList.size() == 0 )
{
Sleep(50);
return ;
}
dosomething(aList) ;
}
请大家出个主意,怎么样处理比较好?谢谢!
|
|