c++ 异步定时执行并返回
时间: 2024-11-27 13:09:21 浏览: 3
API函数大全
在 C++ 中,异步定时执行通常通过线程池、信号量、条件变量或者现代 C++ 的 `std::async` 和 `std::future` 技术来实现。如果你想要定时执行某个任务并能够获取其结果,可以使用以下几个步骤:
1. **使用 std::async**:
使用 `std::async` 函数可以从当前工作线程启动一个新的线程,并立即返回一个 `std::future` 对象。你可以设置一个回调函数或者将一个 lambda 表达式作为参数,这将在指定的时间后执行。
```cpp
#include <iostream>
#include <future>
std::future<int> asyncTask(int seconds) {
return std::async(std::launch::async, []() -> int {
// 这里放置你的耗时操作,比如 sleep 或者网络请求
std::this_thread::sleep_for(std::chrono::seconds(seconds));
return 42; // 返回一个示例值
});
}
int main() {
auto future = asyncTask(5); // 5秒后执行
// 主线程继续运行,异步任务完成后,会自动调用future.get()
std::cout << "主线程结束" << std::endl;
try {
int result = future.get(); // 获取异步任务的结果
std::cout << "异步任务结果: " << result << std::endl;
} catch (std::exception& e) {
std::cerr << "捕获到异常: " << e.what() << std::endl;
}
return 0;
}
```
2. **使用 boost::asio 库**:
如果你需要更底层的控制,可以考虑使用 Boost.Asio 库提供的异步 I/O 和定时器功能。
```cpp
#include <boost/asio.hpp>
void asyncTimer(int seconds) {
boost::asio::deadline_timer timer(io_service);
timer.expires_from_now(boost::posix_time::seconds(seconds));
timer.async_wait([](const boost::system::error_code& ec) {
if (!ec) {
// 完成后的回调,在这里执行你的任务
doSomething();
}
});
}
int main() {
boost::asio::io_service io_service;
asyncTimer(5); // 5秒后执行
io_service.run(); // 运行事件循环直到定时器触发
return 0;
}
```
阅读全文