現在、メインプログラムを使用して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/
簡単なメインループで、私はうまくいくかもしれないアプローチに興味があります。私は運がない数日間このことを理解しようとしています。どんな助けも大歓迎です。
サーバーに接続してrecvデータを受信するために余分なスレッドを発生させるのではなく、なぜノンブロッキング設計を使用していますか?上記の(;;)は、何もしない1つのコアを使い切っているようです。 –