创建带有提升::asio的计时器
Create timer with boost::asio
我想创建每秒执行 1 次的定期任务。但就我而言,boost::asio::d eadline_timer 不应该是全局变量。
boost::asio::io_service _io;
void handler(const boost::system::error_code, int a) {
boost::asio::deadline_timer timer(_io);
//do task
timer.expires_from_now(boost::posix_time::seconds(1));
timer.async_wait(std::bind(handler, _1, a));
}
boost::asio::deadline_timer timer(_io);
timer.expires_from_now(boost::posix_time::seconds(1));
timer.async_wait(std::bind(handler, _1, 1));
更新我明白了。您想要动态分配的计时器吗?
住在科里鲁
#include <boost/asio.hpp>
#include <boost/make_shared.hpp>
using namespace boost;
using Timer = shared_ptr<asio::deadline_timer>;
asio::io_service _io;
void handler(int a, const system::error_code& = {}, Timer timer = make_shared<Timer::element_type>(_io)) {
std::cout << "hello worldn";
timer->expires_from_now(posix_time::seconds(1));
timer->async_wait(bind(handler, a, asio::placeholders::error, timer));
}
int main() {
handler(42);
_io.run();
}
诀窍是boost::bind
绑定到boost::shared_ptr
并保留它的副本 - 延长计时器对象的生存期
截止时间计时器,每秒触发一次,不使用任何全局变量:
#include <boost/asio.hpp>
#include <boost/thread.hpp>
using namespace boost;
int main() {
thread t([] {
asio::io_service io;
asio::deadline_timer dt(io, posix_time::seconds(1));
function<void(system::error_code)> ll = [&](system::error_code ec) {
if (!ec) {
puts("hello world");
dt.expires_from_now(posix_time::seconds(1));
dt.async_wait(ll);
}
};
ll({});
io.run();
});
this_thread::sleep_for(chrono::seconds(2));
std::cout << "asyncn";
t.join();
}
输出:
Hello world
Hello world
async
Hello world
Hello world
....
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在网络套接字计时器滴答后增加asio短读错误
- boost asio计时器是否会在"取消"时阻塞
- 制作一个带有 boost::asio::d eadline_timer 的计时器
- 为什么我不能为一个 asio io_service使用两个计时器?
- 唤醒asio截止时间计时器
- C++ 我可以在没有计时器的情况下制作 boost::asio 连接插座吗?
- 创建带有提升::asio的计时器
- 从其处理程序或处理程序 dtor 销毁 boost::asio 计时器是否安全?
- 如何防止Boost::Asio计时器阻止io_service::run()的返回
- asio/strand:为什么计时器的行为不同
- 使用 boost::asio 实现事件计时器
- 我如何使boost/asio库重复计时器