c++ 异步循环定时执行并返回
时间: 2024-11-27 17:09:43 浏览: 3
定时执行事件_FC函数库_V15版本.rar
5星 · 资源好评率100%
在 C++ 中,异步循环定时执行通常通过线程池、std::async 或者第三方库如 Boost.Asio 来实现。下面是一个基于 std::thread 和 std::chrono 库的基本示例,展示如何创建一个异步任务,定期重复执行,并在每次执行结束后返回结果:
```cpp
#include <iostream>
#include <thread>
#include <chrono>
// 假设我们有一个耗时操作的函数
void blockingOperation(int seconds) {
// 这里替换为实际的计算或IO密集型任务
for (int i = 0; i < seconds * 10; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Async operation executed at " << std::this_thread::get_id() << "\n";
}
}
// 创建一个异步任务,周期性执行
template<typename Func, typename... Args>
auto asyncLoop(Func func, Args&&... args) -> std::future<void> {
auto future = std::async(std::launch::async, [func = std::ref(func), args = std::forward<Args>(args)...]() mutable {
while (true) {
func(args...);
// 指定间隔时间,例如每5秒执行一次
std::this_thread::sleep_for(std::chrono::seconds(5));
}
});
return future;
}
int main() {
std::future<void> loopFuture = asyncLoop(blockingOperation, 2); // 执行2秒操作,每5秒执行一次
// 主线程继续运行...
std::cout << "Main thread is doing other tasks...\n";
// 当主线程结束时,取消异步任务
loopFuture.cancel();
return 0;
}
```
在这个例子中,`asyncLoop` 函数接受一个可变长模板参数列表,用于传递给异步任务的函数及其参数。任务会无限循环执行,直到被外部取消。
阅读全文