std::thread 四:异步(async)

 

*:如果 std::async 中传递参数 std::lunnch::deferred ,就需要等待调用 get() 或者 wait() 才会执行,并且代码非子线程运行,而是在主线程中执行

 

#include <iostream>
#include <thread>
#include <mutex>
#include <list>
#include <future>
using namespace std;


int myThread()
{
    cout << "myThread() start thread id =" << this_thread::get_id() << endl;
    std::chrono::microseconds s(5000);
    std::this_thread::sleep_for(s);
    cout << "myThread() end thread id =" << this_thread::get_id() << endl;
    return 5;
}

class A
{
public:
    int myThread(int num)
    {
        cout << num << endl;
        cout << "myThread() start thread id =" << this_thread::get_id() << endl;
        std::chrono::microseconds s(5000);
        std::this_thread::sleep_for(s);
        cout << "myThread() end thread id =" << this_thread::get_id() << endl;
        return 10;
    }
};

int main()
{
    cout << "main run thread id =" << std::this_thread::get_id() << endl;
    // 创建一个异步线程,使用函数作为参数
    std::future<int> res = std::async(myThread);
    // 创建一个异步线程,使用类作为参数
    A a;
    std::future<int> res1 = std::async(&A::myThread, &a, 1234);
    cout << "continue ....." << endl;
    // 获取线程返回的值
    cout << res.get() << endl;
    cout << res1.get() << endl;
    cout << "main end" << endl;
    return 0;
}

 

posted @ 2023-06-18 23:13  十一的杂文录  阅读(36)  评论(0编辑  收藏  举报