Je suis actuellement en train de tenter de créer une application serveur et client qui utilise winsock, avec un programme principal, j'ai besoin d'un deuxième thread pour toujours écouter les données.C++ Implémentation de threads avec communication inter-thread
Cette communication est non bloquante. J'ai vraiment du mal à trouver un moyen de communiquer entre les threads, un exemple de ce que je cherche est: Serveur envoie une chaîne au client, par exemple. "viewData" et ce type d'informations seront récupérées par le thread principal, puis une fonction spécifique peut également être appelée.
Voici un exemple de mon fils, je crée cela en utilisant _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();
}
J'ai vu aussi ce site qui est censé aider avec le CCI, des conseils sur la this-> http://derkarl.org/itc/
Avec une boucle principale simple, je suis intéressé par toute approche qui pourrait fonctionner, j'ai essayé de comprendre cela pendant quelques jours sans succès, toute aide est grandement appréciée.
Si vous allez avoir la peine d'élever un thread supplémentaire pour vous connecter au serveur et écouter les données de recv, pourquoi utilisez-vous un design non bloquant? Ce qui précède pour (;;) semble utiliser un noyau qui ne fait rien. –