0
我目前正在嘗試創建使用winsock的服務器和客戶端應用程序,並且我需要第二個線程來監聽數據。C++使用線程間通信實現線程
此通信是非阻塞的。我在尋找線程之間的通信方式時遇到了困難,我想要尋找的一個例子是:服務器向客戶端發送一個字符串,例如「viewData」並且這種信息將被主線程獲取,然後還可以調用一個特定的函數。
這裏是我的線程的一個例子,我在這 - > http://derkarl.org/itc/
創建這個使用_beginthread((void(*)(void*))SocketReceive, 0, (void*)&ohuman);
//thread focused on listening to connection
void SocketReceive(comms* ohuman)
{
char buffer[1000];
int inDataLength;
std::string contents;
for(;;)
{
if(!ohuman->getGameOn())
{
// Display message from server
memset(buffer,0,999);
inDataLength=recv((INT_PTR)ohuman->getSocket(),buffer,1000,0);
contents = std::string(buffer); //create a string from the char array for easy access
//only display if we get some content
if(inDataLength > 0)
{
//???DealWithMessage(
int nError=WSAGetLastError();
if(nError!=WSAEWOULDBLOCK&&nError!=0)
{
std::cout<<"Winsock error code: "<<nError<<"\r\n";
std::cout<<"Server disconnected!\r\n";
// Shutdown our socket
shutdown((INT_PTR)ohuman->getSocket(),0x01);
// Close our socket entirely
closesocket((INT_PTR)ohuman->getSocket());
break;
}
}
}
_endthread();
}
我也看到了這個網站這是爲了幫助與ITC,任何建議
隨着一個簡單的主循環,我感興趣的任何方法可能工作,我一直在試圖找出這幾天沒有運氣,任何幫助,非常感謝。
如果您打算提出一個額外的線程來連接服務器並偵聽recv數據,您爲什麼要使用非阻塞設計?上面的(;;)看起來像是用了一個無所事事的核心。 – 2012-03-05 18:26:52