- 论坛徽章:
- 0
|
情况是这样:
主程序中有一个ConnectTo方法用于连接服务器并接收数据,其后有一个Close方法用于断开服务器连接,但是由于ConnectTo方法中用到while循环接收数据,处于阻塞状态,其后的Close方法就无法执行了,请问该如何处理呢?
附上代码如下:
// 连接服务器方法
void ConnectTo(char *address,int port) {
m_address=address;
m_port=port;
hStartEvent = ::CreateEvent(0,FALSE,FALSE,0); //create thread start event
if(hStartEvent == 0)
{
printf("create start event failed,errno:%d\n",::GetLastError());
WSACleanup();
}
fire_event_thread_handle = CreateThread(NULL,0,FireEventThread,(LPVOID)this,0,&fire_event_thread_id);
printf("Thread start...\n");
::WaitForSingleObject(hStartEvent,INFINITE);
CloseHandle(hStartEvent);
printf("Start connect to server\n");
Init();
printf(address);
printf(":%d\n",port);
ClientService.sin_family = AF_INET;
ClientService.sin_addr.s_addr = inet_addr(address);
ClientService.sin_port = htons(port);
// connect
connect(m_socket,(SOCKADDR*)(&ClientService),sizeof(ClientService));
WSANETWORKEVENTS NetworkEvents;
while (true)
{
//Wait for network events on all sockets
WSAWaitForMultipleEvents(1,&NewEvent,FALSE,WSA_INFINITE,FALSE);
WSAEnumNetworkEvents(m_socket,NewEvent,&NetworkEvents);
// CONNECT
if (NetworkEvents.lNetworkEvents & FD_CONNECT)
{
//处理
}
// READ(RECV)
if (NetworkEvents.lNetworkEvents & FD_READ)
{
//处理
}
// WRITE
if (NetworkEvents.lNetworkEvents & FD_WRITE)
{
//处理
}
// CLOSE
if (NetworkEvents.lNetworkEvents & FD_CLOSE)
{
//处理
}
}
}
// 断开服务器方法
void Close()
{
//断开服务器连接
}
//主程序
main()
{
//...
ConnectTo("127.0.0.1",5050);
Close();//执行不到了?怎么办?
} |
|