C++多线程学习(一)

(一)几个基础的thread函数

(1) thread 线程名(函数入口) //创建了线程,线程执行起点入口为函数,线程开始执行。

(2) join():阻塞,阻塞主线程,让主线程等待子线程执行完毕,然后子线程和主线程汇合完毕,主线程往下去走。

(3) detach():分离主线程和子线程。使用时应当注意

  a.若传递临时对象,一定要注意,避免主线程结束了,子线程还在调用临时对象。

  b.如果传递类对象,避免隐式类型转换。全部都在创建线程这一行就构建出临时对象来。

(4) joinable():判断是否可以成功使用join()或者detach(),返回true或者false

(二)构造一个线程的方式

(1)直接使用函数创建

#include <iostream>
#include <thread>
using namespace std;

void myPrint()
{
    cout << "我的线程开始运行" << endl;
    cout << "我的线程运行完毕" << endl;
    return;
}

int main()
{
    thread myThread(myPrint);
    myThread.join();

    if (myThread.joinable())
    {
        cout << "可以调用可以调用join()或者detach()" << endl;
    }
    else
    {
        cout << "不能调用可以调用join()或者detach()" << endl;
    }
    
    cout << "Hello World!" << endl;
    return 0;
}

(2)调用仿函数创建

class Ta
{
public:
    void operator()() //不能带参数
    {
        cout << "我的线程开始运行" << endl;
        //-------------
        //-------------
        cout << "我的线程运行完毕" << endl;
    }
};

//main函数里的:
    Ta ta;
    thread myThread(ta);
    myThread.join();

(3)lambda表达式创建

//main函数中
auto lambdaThread = [] {
        cout << "我的线程开始执行了" << endl;
        //-------------
        //-------------
        cout << "我的线程开始执行了" << endl;
    };

    thread myThread(lambdaThread);
    myThread.join();
posted @ 2022-01-08 21:15  suppersam  阅读(83)  评论(0编辑  收藏  举报