1. ホーム
  2. c++

[解決済み] C++によるスレッディングの簡単な例

2022-03-24 20:27:32

質問

C++で2つの(オブジェクト指向)スレッドを開始する簡単な例を投稿できる方はいらっしゃいますか?

私は、Cスタイルのスレッドライブラリを呼び出すのではなく、実行メソッドを拡張できる実際のC++スレッドオブジェクト(または類似の何か)を探しています。

OSを特定した要望は省きましたが、これは返信してくれる人がクロスプラットフォームのライブラリを教えてくれることを期待してのことです。今、それを明示したところです。

解決方法は?

スレッドに実行させたい関数を作成します。

void task1(std::string msg)
{
    std::cout << "task1 says: " << msg;
}

ここで thread オブジェクトは、最終的に上記の関数を呼び出すことになります。

std::thread t1(task1, "Hello");

(あなたが必要なのは #include <thread> にアクセスするために std::thread クラス)

コンストラクタの引数には、スレッドが実行する関数と、その関数のパラメータを指定します。スレッドは構築時に自動的に開始されます。

後で、スレッドが関数を実行し終わるのを待ちたい場合は、call:

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();
}

std::threadについての詳しい情報はこちら

  • GCCの場合、コンパイルは -std=c++0x -pthread .
  • コンパイラがこの機能(C++11)をサポートしていれば、どのオペレーティング・システムでも動作するはずです。