下面是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 的值被改变了!!!!!!
{
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 的值被改变了!!!!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货