Salut!
Je suis vraiment bloqué sur un problème présentement, qui n'arrive qu'en mode release avec visual studio 2010 sur windows(ça fonctionne en mode debug par contre).
Je programme une application temps réel, je crée un thread par processeur logique. Le problème arrive lorsque je démarre mon premier thread(Autre que le "main thread"), le main thread boucle sur une variable bool avec un while. la variable bool devient true lorsque le nouveau thread entre dans sa fonction de départ.
Le problème, c'est que le processus du main thread arrive à la condition, et il arrête de s'exécuter pour aucune raison, il ne boucle plus, il est mort. J'ai compilé avec gcc sur linux en release/debug, ça fonctionne, sur windows VS2010 ça fonctionne en debug, mais en release le processus reste idle pour aucune raison.
Je dis que le main thread reste bloqué, parce que j'ai ajouté les infos de debug a l'exécutable, et que j'ai vérifié en pesant sur le bouton pause, et le processus ne sort jamais de la ligne! Même que je ne peux pas déplacer la flèche d'exécution ailleur dans la boucle. De plsu la variable a la valeur true, et le nouveau thread continue, lui, son exécution.
Voici la boucle:
Par contre, si j'envois quelque chose dans la console, le processus ne bloque pas, et il continue de boucler jusqu'à ce que la valeur soit vrai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 while (true) { bool val = CURRENT_DEDICATED_TASK->Entered; if (val) // Le main thread bloque ICI break; }
Je n'ai aucune idée de ce qui arrive, j'aimerais comprendre le problème!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 while (true) { bool val = CURRENT_DEDICATED_TASK->isEntered(); if (val) break; // Fonctione!! std::cout << "Allo"; }
Merci pour votre aide.
Partager