2012-03-05 9 views
0

現在、メインプログラムを使用してwinsockを使用するサーバーおよびクライアントアプリケーションを作成しようとしています。常にデータを待機する2番目のスレッドが必要です。C++スレッド間通信でスレッドを実装する

この通信はブロックされません。私は本当にスレッド間の通信の方法を見つけることに問題があります。探しているものの例です:Serverは文字列をクライアントに送ります。 "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とthis-上の任意のアドバイスを助けることになっているこのサイトを見た> http://derkarl.org/itc/

簡単なメインループで、私はうまくいくかもしれないアプローチに興味があります。私は運がない数日間このことを理解しようとしています。どんな助けも大歓迎です。

+0

サーバーに接続してrecvデータを受信するために余分なスレッドを発生させるのではなく、なぜノンブロッキング設計を使用していますか?上記の(;;)は、何もしない1つのコアを使い切っているようです。 –

答えて

0

共用変数(ロック付き)と両方のスレッドがポーリング/書き込みを行うことができます。または、スレッド間にcallback functionsを登録して、あるイベントで他のスレッドを呼び出すことができます。

関連する問題