读书人

怎么做到阻塞模型与非阻塞模型之间正确

发布时间: 2012-06-02 14:16:14 作者: rapoo

如何做到阻塞模型与非阻塞模型之间正确切换?
while(pSrv->bStopSrv)

{

SOCKET sockTemp = accept(pSrv->socketListen,(SOCKADDR*)&ClientAddr,&addr_length);

if(sockTemp == INVALID_SOCKET)

{

continue;

}



myStructure.Socket = sockTemp;

myStructure.hWnd = hServerWnd;


hThread = CreateThread(NULL,0,ClientThread,(LPVOID)&myStructure,0,&dwThreadId);

if (hThread)

{

CloseHandle(hThread);

}


pSrv->AddSocket(sockTemp);


}

ClientThread采用阻塞模型,而AddSocket(sockTemp)采用WSAEventSelect非阻塞

我最终的希望是进入ClientThread线程后变成阻塞模型,如果进入AddSocket就变成非阻塞模型。
阻塞模型与非阻塞模型之间可以正确切换,谢谢高手们了。。。。

[解决办法]
由非阻塞模式变为阻塞模式
1、调用WSAAsyncSelect(),取消所有的异步事件;
2、调用ioctlsocket(),将socket变为阻塞模式
[解决办法]
建议到MSDN上查查WSAAsyncSelect和ioctlsocket函数的详细说明.
[解决办法]

探讨

to license:
我在ClientThread函数开始写下面代码:
WSAAsyncSelect(MySocket, hWnd, 0, 0);//
ul=0;
ioctlsocket(MySocket,FIONBIO,(DWORD*)&ul);
然后在ClientThread最后写
ul=1;
ioctlsocket(MySocket,FIONBIO,……

[解决办法]
ul = 0;是设置回阻塞,而不是1

读书人网 >VC/MFC

热点推荐