Problème: Lorsque la fonction ExecuteQueue Function est appelée, il y a déjà deux paquets existants dans la file d'attente et ils sont appelés correctement (imprimés sur la console). Mais même si la fonction ExecuteQueue est mise en boucle dans un autre Thread, le Thread Principal est bloqué (il ne parvient jamais à QueuePacket).C++ Blocs de threads Main-Thread
J'ai déjà parcouru stackoverflow et la plupart des problèmes étaient liés à .join mais celui-ci ne l'est probablement pas (supprimer le .join ne fait aucune différence).
Main.cpp
int main() {
// Start Client
boost::thread tClient(&Networking::Client::Initialize, Networking::Client()); // Still in Main-Thread???!?!?
Networking::Client::QueuePacket(Networking::Packet::Types::Disconnect);
// Start Modules
tClient.join();
return 0;
}
Client.cpp (Seules les fonctions nécessaires)
static bool QueuePacket(Packet p) { // Pushes existing Packet
return Globals::Queue.push(p);
}
void ExecuteQueue() {
while (Client::Active && Globals::NetworkConnectivity) {
if (Globals::Queue.empty()) { Sleep(500); continue; }
Packet p(Packet::Types::Invalid);
if (!Globals::Queue.pop(p)) continue; // Copies Packet into p on Success
if (p.Type == Packet::Types::Disconnect) { Client::Active = false; } // Disconnects Queue
if (p.Type == Packet::Types::Invalid) { } // Find some error handling here
ExecutePacket(p);
}
}
Et quelle est la question? – tambre
@tambre Je vais prendre une supposition éclairée et dire comment empêcher le blocage du thread principal ...? – Swagov3rflow
Je ne pense pas qu'il y ait assez d'informations pour répondre à cette question. – drescherjm