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 @   suppersam  阅读(91)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示