C++ 多线程创建


C++ 多线程操作

一. 函数对象创建线程

#include <iostream>
#include <pthread.h>
using namespace std;


void func()
{
    cout << "strat" <<endl;
    cout << "end" <<endl;

}

int main()
{
    thread m_thread(func);
    m_thread.join();
    cout << "zzz" <<endl;
    return 0;
}

二. 用类对象创建线程

1.

#include <iostream>
#include <pthread.h>
using namespace std;


// 类要变成可调用对象需要重载操作符()

class T
{
    public:
        void operator()()   //不能带参数,代码从这开始执行
        {
        cout<<"start"<<endl;
        //...
        cout<<"end"<<endl;
        }
}

int main()
{
    T t;
    thread m_thread(t);
    m_thread.join();
    cout << "zzz" <<endl;
    return 0;
}

2.

#include<iostream>
#include<pthread.h>

// 类要变成调用对象需要重载操作符
class T
{
    public:
        int m;
        T(int i):m(i)
        {

        }
        void operator()()   //不能带参数 代码从这开始
        {
            cout << "start" << endl;
            //...
            cout << "end" << endl;
        }

};

int main()
{
    int m = 6;
    T t(m);
    thread m_thread(t);
    m_thread.join();

    cout << "zzz" << endl;
}

三. 将类中的某个函数作为线程的入口地址

class T
{
    public:
        void GetMsg()
        {

        }

        void SaveMsg()
        {

        }
}

T t;
// 第一个是取址 第二个是引用
thread obj1(&T::GetMsg, &t);
thread obj2(&T::SaveMsg, &t);

obj1.join();
obj2.join();

四. lambda 表达式创建线程

#include<iostream>
#include<pthread.h>
using namespace std;

int main()
{
    auto m_lambda = []
    {
        cout << "start" << endl; 
    }
    thread m_thread(m_lambda);
    m_thread.join();

    cout << "zz" <<endl;
}

文章作者: bySouffle
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 bySouffle !
  目录