Je suis novice en threading C++. J'ai développé une application multi-thread en C++ 11 en utilisant des blocs Code:.L'exécution de thread diffère-t-elle dans IDE et comme application exe en C++?
L'application semble fonctionner et fonctionner parfaitement (démarrer le programme, diviser la tâche en threads, à la fin de la tâche, puis imprimer les informations, puis quitter) à partir des blocs de code. Mais après avoir généré le fichier exe en utilisant les blocs de code, et en exécutant le fichier exe séparément de la ligne de commande, le programme fonctionne comme avant jusqu'à ce que la tâche soit terminée, mais à la fin de toute la tâche, les threads ne parviennent pas à quitter passez à l'étape suivante.
L'exécution du programme dans le code: blocks et outside doit être identique. J'ai ajouté la fonction de tâche de division ci-dessous qui exécute la fonction filetée. J'ai utilisé le moodycamel::ConcurrentQueue
pour la fonction ci-dessous.
void divide_task(){
std::atomic<int> doneConsumers(0);
std::thread threads[cores_aval];
for (int i = 0; i != cores_aval; ++i) {
threads[i] = std::thread([&]() {
Item* item = new Read;
do{
while (con_read_q.try_dequeue(item)) {
//do something with hitem;
delete item;
}
}
while (doneConsumers.fetch_add(1, std::memory_order_acq_rel) + 1 == cores_aval);
});
}
}
Mise à jour: Merci pour les réponses. J'ai trouvé le problème avec les paramètres d'option de construction dans les blocs de code. L'un des drapeaux du compilateur dans la branche de publication affectait le fichier exe final, qui réduisait la taille du fichier en supprimant les symboles.
Il y a peut-être un défaut dans votre code. [Mcve] –
Votre code est incomplet; en particulier, il semble manquer une fonction 'main()' et au moins un '# include'. S'il vous plaît [modifier] votre code c'est un [mcve] de votre problème, alors nous pouvons essayer de le reproduire et de le résoudre. Vous devriez aussi lire [ask]. –