用packaged_task写一个多线程的程序
时间: 2023-03-24 13:05:05 浏览: 109
可以使用packaged_task和future来实现多线程程序。首先,创建一个packaged_task对象,将需要执行的函数作为参数传递给它。然后,使用std::thread创建一个新线程,并将packaged_task对象作为参数传递给它。最后,使用future对象来获取函数的返回值。
以下是一个示例代码:
#include <iostream>
#include <future>
#include <thread>
int add(int a, int b) {
return a + b;
}
int main() {
std::packaged_task<int(int, int)> task(add);
std::future<int> result = task.get_future();
std::thread t(std::move(task), 1, 2);
std::cout << "Result: " << result.get() << std::endl;
t.join();
return ;
}
在这个示例中,我们创建了一个名为task的packaged_task对象,并将add函数作为参数传递给它。然后,我们使用get_future()方法获取一个future对象,以便在稍后获取函数的返回值。
接下来,我们使用std::thread创建一个新线程,并将task对象作为参数传递给它。在这个示例中,我们将1和2作为add函数的参数传递给task对象。
最后,我们使用future对象的get()方法来获取函数的返回值,并将其打印到控制台上。最后,我们使用join()方法等待线程的结束。
这就是使用packaged_task和future实现多线程程序的基本方法。
阅读全文