以下のコードサンプルは、一度に1つのスレッドを効率的に実行できるようにします。スレッドへの参照を保持し、後で 'Thread.join'を呼び出しても同じ結果が得られます。プログラムがスレッドを独立して並行して処理し続けるのを待って、これらのスレッドをこのようにして終了させる方法は?他のいくつかのKernelオブジェクトシグナリングメカニズムが使われなければならないと私には思われます。 (要するに二次スレッドにメインスレッドを結びつけるために「参加」使用すると、他のスレッドを同時に実行できません?)複数のスレッドが完了してからC++でプログラムを終了するまでの適切な方法11
int main() {
while (cin) {
getline(cin, input_line);
if (input_line.length()>0)
{
thread t = thread(SomeLengthyCheck, input_line);
t.join();
}
}
}
」o11c @によって提案された例外安全なバージョンセカンダリスレッドにメインスレッドを結びつけるために 『参加』使用すると、他のスレッドを同時に実行することはできません。 ? " - その仮定は単に間違っている。ちょうど1秒間スリープする複数のスレッドを起動してください。その後、これらすべてのスレッドに参加し、全体のプログラムにかかる時間を監視します。 –
@Ulrich whileループで 'thread.join'を呼び出すと、他のスレッドも起動しないので、上記のコードフラグメントを参照していました。すべてのスレッドが作成された後に結合を使用すると、完了するまで続けます(後述)。また、私はスレッドがメインスレッドが終了した後でも続行する必要がある仕様状態を理解しますが、私はそのアプローチに慣れていません。 – Gio