std::thread
が実行された後(つまり、仕事関数を呼び出す)、join()
と呼んだときにのみ動作し始めます。これはドキュメント内で少し不明です。join()を呼び出す前にstd :: threadが実行されますか?
1
A
答えて
2
インスタンス化すると実行されます。
結合は、他のスレッドが実行を終了するまで現在のスレッドが待機するように使用されます。
いくつかの例コードstd::tread
一旦
void f1(int n)
{
for (int i = 0; i < 5; ++i) {
std::cout << "Thread 1 executing\n";
++n;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
void f2(int& n)
{
for (int i = 0; i < 5; ++i) {
std::cout << "Thread 2 executing\n";
++n;
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
int main()
{
int n = 0;
std::thread t1; // t1 is not a thread
std::thread t2(f1, n + 1); // pass by value
std::thread t3(f2, std::ref(n)); // pass by reference
std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread
t2.join();
t4.join();
std::cout << "Final value of n is " << n << '\n';
}
Possible output:
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 2 executing
Thread 1 executing
Final value of n is 5
1
http://en.cppreference.com/w/cpp/thread/thread/threadからは、それが命令を実行することができる走行状態にある作成されます。
一定の時間間隔で何かが行われるという保証はありませんが、その間隔が長くなったり長くなるにつれて、何かが起こる確率が100%に近づくようになります。
通常、活気のあるデザインは、10分の1秒の間隔になると、待機していないすべてのスレッドが何らかのアクティビティを表示することを実際に保証します。
関連する問題
- 1. 呼び出された関数が実行される前にコードを実行
- 2. 呼び出される前に実行されるコールバック
- 3. 呼び出されたメソッドの前に実行されるトースト
- 4. 呼び出されるたびにPHP関数が実行されますか?
- 5. onPageSelectedの実行前にBEFORE onCreateViewが呼び出されましたか?
- 6. 呼び出し元でクロスAppDomain呼び出しが実行されます。
- 7. Thread.MemoryBarrier()が呼び出されるたびにカスタムコードを実行できますか?
- 8. FB.init()を呼び出す前にFB.login()が呼び出されました
- 9. Springブートアプリケーションのコントローラが呼び出される前にコードを実行する
- 10. postDelayedを持つローカルハンドラは、実行可能ファイルが呼び出される前にガベージコレクトされますか?
- 11. initWithNibNameでaddSubviewを呼び出すと、addSubview呼び出しが実行される前に、viewDidLoad(および他のUIオブジェクトのinits)が起動されます。
- 12. initWithNibNameの前にViewDidLoadが呼び出されていますか?
- 13. std :: threadはメインスレッドを検出します
- 14. Application.Run()が呼び出される前に終了(終了)とアプリケーションが呼び出されていますか?
- 15. exit()を呼び出すときにデストラクタが実行されますか?
- 16. Pythonが並列に実行されるサブプロセスを呼び出す
- 17. すぐに、prepareが呼び出される前にdidSelectRowAtが呼び出されます
- 18. QLPreviewControllerデリゲートメソッドはiOS 10では呼び出されませんが、iOS 10より前に実行された場合に呼び出されます
- 19. mysql_queryが呼び出されるたびに関数を実行します。 (PHP)
- 20. IControllerFactory.GetControllerInstance()が呼び出される前にカスタムコードを実行するにはどうすればよいですか?
- 21. login_requiredが呼び出される直前にDjangoがアクションを実行しますか?
- 22. 呼び出されたディレクトリ内で実行するバッチファイルを呼び出す
- 23. なぜ `pthread_mutex_unlock`が` pthread_cond_signal`を呼び出す前に呼び出されていますか?マルチプログラミングの技術から
- 24. isAlive()またはjoin()を呼び出す
- 25. actionListenerが呼び出される前にAjaxコンポーネントが更新されますか?
- 26. F#関数が呼び出されずに実行されています
- 27. 実行時に呼び出されない印刷メソッドは、デバッグ時に呼び出されます
- 28. なぜこのメソッドは呼び出されずに実行されますか?
- 29. フラグメントの実行前にonCreateViewが呼び出されていない
- 30. std :: future :: get()が呼び出された後にスレッドが実際に起動しますか?
すぐに起動します。新しいスレッドが何かをする前に、他のスレッドがそれに参加したいときまで、新しいスレッドが待つことはむしろ意味がありません。 –
スレッドは実行状態で作成されるため、スレッドは 'join()'の前に実行されます。また、スレッドを一時停止するために 'std :: mutex'などを使用することもできますが、停止状態のスレッドを作成するオプションはありません。 –