下面是IOCP接收线程里面的部分代码: if(pOverlapped->InternalHigh != dwBytesTransfer)
{
ATLTRACE("字节数不确定 \r\n");
ATLTRACE("internalHigh : %d dwBytesTransfer : %d IN Thread %d \r\n", pOverlapped->InternalHigh, dwBytesTransfer,
GetCurrentThreadId());
pUdpData->Unlock();
continue;
}
if(pOverlapped->InternalHigh <= 0 || dwBytesTransfer == 0)
{
ATLTRACE("没有数据\r\n");
pUdpData->Unlock();
continue;
}
ATLTRACE("internalHigh : %d  In thread %d  1\r\n ", pOverlapped->InternalHigh, GetCurrentThreadId());//1
//调用回调函数的地方
addrLocal.S_un.S_addr = htonl(pUdpData->uIP);
sLocalPort = pUdpData->uPort;
bDelete = FALSE;
sPeerPort = ntohs(pUdpData->addrFrom.sin_port);
ATLTRACE("internalHigh : %d  In thread %d  2\r\n ", pOverlapped->InternalHigh, GetCurrentThreadId());
ATLTRACE("internalHigh : %d  In thread %d  3\r\n", pOverlapped->InternalHigh, GetCurrentThreadId());
CComVariant varBuffer;//(pUdpData->szBuf);
ATLTRACE("internalHigh : %d In thread %d  4\r\n", pOverlapped->InternalHigh, GetCurrentThreadId());
CComVariant varPeerIP;//(inet_ntoa(pUdpData->addrFrom.sin_addr));
ATLTRACE("internalHigh : %d In thread %d  5\r\n", pOverlapped->InternalHigh, GetCurrentThreadId());
CComVariant varLocalIP;//(inet_ntoa(addrLocal));
ATLTRACE("internalHigh : %d In thread %d  6\r\n", pOverlapped->InternalHigh, GetCurrentThreadId());
if(pOverlapped->InternalHigh <= 0 && IsDebuggerPresent())
{
DebugBreak();
}调试的时候发现如下输出!很是纳闷??望高手指点:
before Leave cs in thread 2948 
after Leave cs in thread 2948 
Enter cs in thread 2716 
recv data: 100 bytes  in thread 2716 
Transfer data : 100 bytes in thread 2716 
internalHigh : 100  In thread 2716  1
 internalHigh : 100  In thread 2716  2
 internalHigh : 0  In thread 2716  3
internalHigh : 0 In thread 2716  4
internalHigh : 3344706 In thread 2716  5
internalHigh : 0 In thread 2716  6
TestATL.exe 已触发了一个断点不知道怎么internalHigh 的值被改变了!!!!!!