用线程最好要加信号量
UINT CClientSocket::RecvDataProcThread(LPVOID pParam)
{
CTST* TST= reinterpret_cast<CTST*>(pParam);
while(true)
{
TST->m_ReciveDealLock.Lock();
TST->DoData(....);
TST->m_ReciveDealLock.Unlock();
Sleep(50);
}
return 0;
}
今天在使用线程方面有一个很大的教训,平时对线程了解也不是很多,写了一个线程用于接数据.
整个系中就只有这么一个线程.心里面想应该只有一个单线程应该不会有什么太大的问题.
哪知道,在demo中用简单的测试(DEMO没有处理任何逻辑)没有出现任何问题.但是一把它拿到真实的环境
中,就随机的丢掉数据包.或者收到两个或多个相同的数据包.围绕这个问题我整整测试了两天,我用
demo测试了两个晚上没有出现一个错误的数据包.但是一把它拿到真实环境中就出问题了.一般第一次不会出问题,到了第二次就会出问题.
今天早上以来,心想是不是线程的问题了.于是在线程那里加了一个信号量.控制一下.
也就是加了m_ReciveDealLock这个信号量.
呵呵,加了之后就好了.
所有数据都正确接收,没有丢包现象了.

浙公网安备 33010602011771号