C++ で 2 つの (オブジェクト指向の) スレッドを開始する簡単な例を投稿してもらえますか。
C スタイルのスレッド ライブラリを呼び出すのではなく、実行メソッドを拡張できる実際の C++ スレッド オブジェクト (または同様のもの) を探しています。
回答者がクロスプラットフォームのライブラリを使用して返信してくれることを期待して、OS 固有のリクエストは省略しました。今はそれを明確にしています。
ベストアンサー1
スレッドで実行する関数を作成します。例:
void task1(std::string msg)
{
std::cout << "task1 says: " << msg;
}
次に、thread
上記の関数を最終的に呼び出すオブジェクトを次のように作成します。
std::thread t1(task1, "Hello");
(クラス#include <thread>
にアクセスする必要がありますstd::thread
。)
コンストラクターの最初の引数はスレッドが実行する関数であり、その後に関数のパラメーターが続きます。スレッドは構築時に自動的に開始されます。
後でスレッドが関数の実行を完了するまで待機する場合は、次を呼び出します。
t1.join();
(参加とは、新しいスレッドを呼び出したスレッドが、新しいスレッドの実行が終了するまで待機してから、自身の実行を続行することを意味します。)
コード
#include <string>
#include <iostream>
#include <thread>
using namespace std;
// The function we want to execute on the new thread.
void task1(string msg)
{
cout << "task1 says: " << msg;
}
int main()
{
// Constructs the new thread and runs it. Does not block execution.
thread t1(task1, "Hello");
// Do other things...
// Makes the main thread wait for the new thread to finish execution, therefore blocks its own execution.
t1.join();
}
- GCC では、 でコンパイルします
-std=c++0x -pthread
。 - これは、コンパイラがこれをサポートしていれば、どのオペレーティングシステムでも動作するはずです(C++11) 特徴。