如何编写获取线程返回值的实现代码?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1060个文字,预计阅读时间需要5分钟。
在C++11中,`std::future`和`std::promise`为我们提供了获取异步任务返回值的机制。虽然我们期望能够在线程返回值时立即得到结果,但在多线程编程中,我们注意到`std::thread`对象会忽略顶层函数的返回值。这引发了以下问题:
C++11 std::future and std::promise
在许多时候,我们会有这样的需求——即我们想要得到线程返回的值。
但是在C++11 多线程中我们注意到,std::thread对象会忽略顶层函数的返回值。
那问题来了,我们要怎么获得线程的返回值呢?
我们通过一个例子来说明如何实现这个需求。
假设我们的app会创建一个线程来压缩一个文件夹,该线程在压缩完文件夹后会返回压缩文件 *.zip 和这个zip文件的大小,我们现在就想获得这个线程的返回值。
有两种方法可以实现这个需求:
1. 传统的方法:在线程间共享指针
传递一个指针给压缩文件的线程,表示压缩文件的线程将会把值写入指针指向的内存空间。此时主线程将用条件变量等待值被写入,当压缩文件线程把值写入指针指定的内存后,将唤醒(signal)条件变量,然后主线程将被唤醒,然后从指针指向的内存中获取返回值。
本文共计1060个文字,预计阅读时间需要5分钟。
在C++11中,`std::future`和`std::promise`为我们提供了获取异步任务返回值的机制。虽然我们期望能够在线程返回值时立即得到结果,但在多线程编程中,我们注意到`std::thread`对象会忽略顶层函数的返回值。这引发了以下问题:
C++11 std::future and std::promise
在许多时候,我们会有这样的需求——即我们想要得到线程返回的值。
但是在C++11 多线程中我们注意到,std::thread对象会忽略顶层函数的返回值。
那问题来了,我们要怎么获得线程的返回值呢?
我们通过一个例子来说明如何实现这个需求。
假设我们的app会创建一个线程来压缩一个文件夹,该线程在压缩完文件夹后会返回压缩文件 *.zip 和这个zip文件的大小,我们现在就想获得这个线程的返回值。
有两种方法可以实现这个需求:
1. 传统的方法:在线程间共享指针
传递一个指针给压缩文件的线程,表示压缩文件的线程将会把值写入指针指向的内存空间。此时主线程将用条件变量等待值被写入,当压缩文件线程把值写入指针指定的内存后,将唤醒(signal)条件变量,然后主线程将被唤醒,然后从指针指向的内存中获取返回值。

