我是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],然後我們可以嘗試重現並解決它。你還應該閱讀[問]。 –