自学内容网 自学内容网

packaged_task 异步调用函数打包

packaged_task 异步调用函数打包

在这里插入图片描述

#include <thread>
#include <iostream>
#include <future>
#include <string>
using namespace std;
//期望调用函数和取返回值分开为二步走

string TestPack(int index)//线程函数
{
    cout << "begin Test Pack " << index << endl;
    this_thread::sleep_for(2s);
    return "Test Pack return";
}
int main(int argc, char* argv[])
{
    packaged_task< string(int) > task(TestPack);//生成一个test
    auto result = task.get_future();//获取函数返回值
    //task(100);
    thread th(move(task),101);

    cout << "begin result get" << endl;

    //测试是否超时
    for (int i = 0; i < 30; i++)
    {
        if (result.wait_for(100ms) != future_status::ready)//等待超时
        {
            continue;
        }
    }
    if (result.wait_for(100ms) == future_status::timeout)//如果等待超时
    {
        cout << "wait result timeout" << endl;
    }
    else//如果等待没有超时,取得结果
        cout << "result get " << result.get() << endl;
    th.join();
    getchar();
    return 0;
}

在这里插入图片描述


原文地址:https://blog.csdn.net/qq_45159887/article/details/143025031

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!