zoukankan      html  css  js  c++  java
  • c++ 多线程(2)创建线程对象的方法

    @

    一、用函数对象创建线程

    // 用函数对象创建线程
    #include <iostream>
    #include <thread>
    using namespace std;
    
    void func(){
        cout<<"我的线程开始执行了"<<endl;
        //...
        cout<<"我的线程结束执行了"<<endl;
    }
    
    int main(){
        thread my_thread(func);
        my_thread.join();//等待子线程执行结束
    
        cout<<"I love China"<<endl;
        return 0;
    }
    

    二、用类对象创建线程

    // 用类对象创建线程
    #include <iostream>
    #include <thread>
    using namespace std;
    
    
    // 类要变成可调用对象需要重载操作符()
    class TA{
    public:
        void operator()()//不能带参数,代码从这开始执行
        {
            cout<<"我的线程开始执行了"<<endl;
            //...
            cout<<"我的线程结束执行了"<<endl;
        }
    };
    
    int main(){
    
        TA ta;
        thread my_thread(ta);// ta 可调用对象
        my_thread.join();//等待子线程执行结束
    
        cout<<"I love China"<<endl;
        return 0;
    }
    
    // 用类对象创建线程
    #include <iostream>
    #include <thread>
    using namespace std;
    
    
    // 类要变成可调用对象需要重载操作符()
    class TA{
    public:
        int m_i;
        TA(int i):m_i(i){}
        void operator()()//不能带参数,代码从这开始执行
        {
            cout<<"我的线程"<<m_i<<"开始执行了"<<endl;
            //...
            cout<<"我的线程结束执行了"<<endl;
        }
    };
    
    int main(){
        int myi =6;
        TA ta(myi);
        thread my_thread(ta);// ta 可调用对象
        my_thread.join();//等待子线程执行结束
    
        cout<<"I love China"<<endl;
        return 0;
    }
    

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

    class Data_
    {
    public:
        void GetMsg(){}
        void SaveMsh(){}
    };
    //main函数里
        Data_ s;
        //第一个&意思是取址,第二个&意思是引用,相当于std::ref(s)
        //thread oneobj(&Data_::SaveMsh,s)传值也是可以的
        //在其他的构造函数中&obj是不会代表引用的,会被当成取地址
        thread oneobj(&Data_::SaveMsh,&s);
        thread twoobj(&Data_::GetMsg,&s);
        oneobj.join();
        twoobj.join();
    
    

    四、用lambda表达式创建线程

    // 用lambda表达式创建线程
    #include <iostream>
    #include <thread>
    using namespace std;
    
    
    int main(){
    
        auto my_lambda = []  {
                cout<<"我的lambda表达式线程开始执行"<<endl;
        };
        thread my_thread(my_lambda);// ta 可调用对象
        my_thread.join();//等待子线程执行结束
    
        cout<<"I love China"<<endl;
        return 0;
    }
    
  • 相关阅读:
    chlick 在 blur 之后触发
    屏蔽运营商广告
    script标签清除缓存
    http-equiv 详解
    jqLite
    js 时间戳和转换-转载
    JS数组的常用方法
    js 前端实现文件流下载的几种方式
    解决兼容性的库
    移动端兼容性问题
  • 原文地址:https://www.cnblogs.com/long5683/p/12992770.html
Copyright © 2011-2022 走看看