C ++ 11マルチスレッド作成の3つの方法

  すべてのC ++アプリケーションには、メインスレッド(メイン関数)があります。C ++ 11標準では、スレッドの作成はstd :: threadクラスを介して作成できます。このクラスには、ヘッダーファイルを含める必要があります。

std :: threadクラスオブジェクトを初期化するには、パラメータを渡す3つの方法があります。

  関数ポインタクラスオブジェクトラムダ式
  
  

たとえば、次のようなスレッドオブジェクトを作成できます。
ここに画像の説明を挿入します
スレッドオブジェクトが作成された後、渡されたコールバック関数を並行して実行できます。
すべてのスレッドが終了するのを待ってから終了する前に終了する場合は、join()関数を使用できます。
実行中のプロセス中にスレッドが区別された場合はどうなりますか?

  各スレッドには独自のスレッドIDがあります。std:: threadによって作成されたスレッドは、std :: thread :: get_id()を使用してスレッドIDを取得できます。

たとえば、現在のスレッドIDを取得します。

  std :: this_thread :: get_id()

std :: threadがどのスレッドオブジェクトにも関連付けられていない場合、get_id()はstd :: threadのデフォルトコンストラクタオブジェクトを返します。

1.関数ポインタを使用してスレッドを作成します

ここに画像の説明を挿入します
操作結果:
ここに画像の説明を挿入します
サンプルコードを添付してください:

//小问学编程
#include<iostream>
#include<thread>
using namespace std;

void thread_function()
{
    
    
    for(int i=0;i<10000;i++)
        cout<<"thread function Executing"<<endl;
}

int main()
{
    
    
    thread threadObj(thread_function);
    for(int i=0;i<10000;i++)
        cout<<"Display From MainThread"<<endl;
    threadObj.join();
    cout<<"Exit of Main function"<<endl;
    return 0;
}

2.クラスオブジェクトを使用してスレッドを作成します

ここに画像の説明を挿入します
操作結果:
ここに画像の説明を挿入します
サンプルコードを添付してください:

//小问学编程
#include<iostream>
#include<thread>
using namespace std;

class DisplayThread
{
    
    
public:
	void operator()()
	{
    
    
    for(int i=0;i<10000;i++)
        cout<<"thread function Executing"<<endl;
	}
};

int main()
{
    
    
    thread threadObj((DisplayThread()));
    for(int i=0;i<10000;i++)
        cout<<"Display From MainThread"<<endl;
    threadObj.join();
    cout<<"Exit of Main function"<<endl;
    return 0;
}

3.ラムダを使用してスレッドを作成します

ここに画像の説明を挿入します
演算結果:
ここに画像の説明を挿入します

サンプルコードを添付してください:

//小问学编程
#include<iostream>
#include<thread>
using namespace std;

int main()
{
    
    
    int x=9;
    thread threadObj([]{
    
    
        for(int i=0;i<10000;i++)
            cout<<"Display Thread Executing"<<endl;
                     });
    for(int i=0;i<10000;i++)
        cout<<"Display From Main Thread"<<endl;
    threadObj.join();
    cout<<"Exiting from Main Thread"<<endl;
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_43297891/article/details/113821892