私はC++スレッディングの初心者です。私はCode:blocksを使ってC++ 11でマルチスレッドアプリケーションを開発しました。スレッド実行はIDE内でもC++でのexeアプリケーションとも異なりますか?
コードブロックからアプリケーションの継ぎ目が完全に実行され(プログラムの開始、タスクのスレッドへの分割、タスクの完了時に情報の印刷と終了が行われます)、終了します。
しかし、コードブロックを使用してexeファイルを生成し、コマンドラインからexeファイルを別々に実行すると、プログラムは以前と同じように動作しますが、すべてのタスクが完了するとスレッドは終了せず、次のステップに進んでください。
コード内でプログラムを実行する:ブロックと外部は同じである必要があります。私はスレッド関数を実行する以下の分割タスク関数を追加しました。私は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);
});
}
}
更新:は、回答いただきありがとうございます。コードブロックにビルドオプション設定の問題が見つかりました。リリースブランチのコンパイラフラグの1つが、最終的なexeファイルに影響を与え、シンボルの削除によってファイルサイズが縮小されました。
おそらくコードに不具合があります。 [Mcve] –
あなたのコードは不完全です。特に、main()関数と少なくとも1つの '#include'が欠落しているようです。コードを問題の[mcve]にするようにコードを編集してください。そうすれば、それを再現して解決することができます。 [ask]も読んでください。 –