C ++使用Inter线程通信实现线程

时间:2012-03-05 17:57:46

标签: c++ multithreading sockets

我目前正在尝试创建使用winsock的服务器和客户端应用程序,使用主程序我需要有第二个线程来始终监听数据。

此通讯无阻塞。我在找到线程之间的通信方式时遇到了麻烦,我正在寻找的一个例子是:服务器向客户端发送字符串,例如“viewData”和主要线程将获取此类信息,然后也可以调用特定函数。

以下是我的主题示例,我使用_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的网站,对此有任何建议 - > http://derkarl.org/itc/

通过一个简单的主循环,我对任何可能有用的方法感兴趣,我一直试图弄清楚这几天没有运气,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你可以有一个共享变量(带有锁定)和两个线程轮询/写入它,或者你可以在线程之间注册callback functions并在某个事件上调用另一个线程。