将 多个某个函数执行加入到任务队列使用一个 std::thread 执行
时间: 2024-05-11 08:19:57 浏览: 8
你可以使用C++11中的std::thread和std::async来实现将多个某个函数执行加入到任务队列使用一个std::thread执行的功能。
首先,可以使用std::async创建一个异步任务并返回一个std::future对象,表示该任务的未来结果。这样可以将多个函数执行加入到任务队列中,这些任务将在后台异步执行。
接着,可以使用std::thread来启动一个线程,该线程从任务队列中读取任务,并使用std::future的get()方法获取任务的结果。在获取结果之后,线程可以将结果保存到一个容器中,或者将结果打印到控制台等。
以下是一个使用std::thread和std::async实现将多个某个函数执行加入到任务队列使用一个std::thread执行的示例代码:
```c++
#include <iostream>
#include <future>
#include <thread>
#include <vector>
void myFunction(int num)
{
std::cout << "Thread " << std::this_thread::get_id() << ": " << num << std::endl;
}
int main()
{
std::vector<std::future<void>> futures;
// 将多个函数执行加入到任务队列中
for (int i = 0; i < 10; ++i)
{
futures.push_back(std::async(std::launch::async, myFunction, i));
}
// 启动一个线程来执行任务队列
std::thread thread([&futures]() {
for (auto& future : futures)
{
future.get();
}
});
// 等待线程执行完毕
thread.join();
return 0;
}
```
在上面的代码中,myFunction函数表示要执行的某个函数,该函数接受一个int类型的参数num。在主函数中,将多个myFunction函数的执行加入到一个std::vector<std::future<void>>类型的容器中,每个任务都使用std::async创建。接着,启动一个线程来执行任务队列,该线程从容器中读取任务,并使用std::future的get()方法获取任务的结果。最后,等待线程执行完毕,并返回0表示程序正常结束。