2010-08-18 31 views
0

在C++中,如何使用线程在Sockets中不阻止接收功能?使用C++在Windows中进行线程化操作

// Receive until the peer closes the connection 
do { 

    iResult = recv(lhSocket, recvbuf, recvbuflen, 0); 
    if (iResult > 0) 
     printf("Bytes received: %d\n", iResult); 
    else if (iResult == 0) 
     printf("Connection closed\n"); 
    else 
     printf("recv failed: %d\n", WSAGetLastError()); 

} while(iResult > 0); 

closesocket(lhSocket); 
WSACleanup(); 
+1

我对此并不十分确定,但我认为使用Boost.Asio可能会更容易,因为它是异步的,完全跨平台的,并且不需要使用线程。 http://www.boost.org/doc/libs/1_44_0/doc/html/boost_asio.html – 2010-08-18 11:24:09

回答

2

致电CreateThread()创建一个新的线程。如果要使用从套接字接收的信息更新UI,则应为窗口定义一条用户消息(值大于WM_USER),然后致电PostMessage()以通知您的窗口所需的信息。

+0

DWORD WINAPI ThreadFunc(LPVOID lpParam) {s}“szMsg [80]; printf(szMsg,“ThreadFunc:Parameter =%d \ n”,((int *)lpParam)); return 0; } void main() DWORD dwThreadId,dwThrdParam = 1; HANDLE hThread; hThread =的CreateThread( NULL,//无安全属性 0,//使用缺省堆栈大小 的ThreadFunc,//线程函数 &dwThrdParam,//参数线程功能 0,//使用缺省创建旗帜 &dwThreadId) ; //返回线程标识符 //检查成功的返回值。 if(hThread == NULL) CloseHandle(hThread); } 是不是在屏幕上打印任何东西? – 2010-08-18 11:51:35

+0

@Swapnil这可能是因为线程一旦创建,程序正在退出。 CreateThread()将在创建线程后立即返回,因此线程可能没有时间打印任何内容。如果在调用CreateThread()之后在线程句柄上添加对WaitForSingleObject()的调用,则应该会看到打印的内容。 – Andy 2010-08-18 13:24:05

相关问题