一、std::async
、std::future
:
std::async
是一个函数模板,用来启动一个异步任务,它返回一个std::future
对象,这个对象是个类模板。- 这个
std::future
对象中就含有线程入口函数所返回的结果,我们可以通过调用future
对象的成员函数get()
来获取结果。
二、std::future
的get()
与wait()
:
get()
成员函数会等待线程执行结束 返回结果,拿不到结果它就会一直等待。get()
只能调用一次。std::future
对象的wait()
成员函数,用于等待线程返回 并不返回结果.
实例:(需要加上头文件 #include<future>
)
int myThread()
{
cout << "myThread() START..." << " thread_id:" << std::this_thread::get_id() << endl;
Sleep(5000);
cout << "myThread() END..." << " thread_id:" << std::this_thread::get_id() << endl;
return 5;
}
int main()
{
cout << "main:" << " thread_id:" << std::this_thread::get_id() << endl;
std::future<int>result = std::async(myThread);//创建线程并开始执行
cout << "continue..." << endl;
//result.wait();
cout << result.get() << endl;
cout << "------ end -----" << endl;
return 0;
}
2.1、std::lunch::deferred
:
并没有创建新线程,在主线程运行子线程内容
- (defer推迟,延期)表示线程入口函数的调用会被延迟,一直到
std::future
的wait()
或者get()
函数被调用时(由主线程调用)才会执行;如果wait()
或者get()
没有被调用,则不会执行。若主线中没有wait()
或者get()
出现,则新线程根本未被创建。
std::future<int>result = std::async(std::launch::deferred