我是C++线程的新手。我使用Code:blocks在C++ 11中开发了一个多线程应用程序。线程执行是否在IDE中与C++中的EXE应用程序不同?
应用程序接缝执行和完美工作(程序启动,将任务分成线程,任务完成后,然后打印信息,然后退出)从代码块。
但是,在使用代码块生成exe文件后,单独从命令行运行exe文件后,程序将像以前一样工作,直到任务完成,但完成所有任务后,线程无法退出并且继续下一步。
在代码中运行程序:blocks和outside应该是相同的。我在下面添加了执行线程函数的分割任务函数。我已经使用下面的函数moodycamel::ConcurrentQueue
。
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);
});
}
}
更新:感谢您的答复。我发现代码块中的构建选项设置存在问题。发行版分支中的一个编译器标志影响了最终的exe文件,通过剥离符号减小了文件大小。
也许你的代码有缺陷。 [Mcve] –
您的代码不完整;特别是它似乎缺少'main()'函数和至少一个'#include'。请[编辑]你的代码,这是你的问题[mcve],然后我们可以尝试重现并解决它。你还应该阅读[问]。 –