【发布时间】:2011-11-24 14:48:07
【问题描述】:
据我了解,我应该能够使用 boost:asio 异步计时器每隔 n 毫秒触发一次回调,而我的程序正在执行其他操作而无需线程。这个假设正确吗?
我将以下测试程序放在一起,它只打印处理程序消息,从不打印 rand() 值。我想要的是看到所有的浮点数在屏幕上向下滚动,然后每 250 毫秒就会出现一条处理程序消息。
代码如下:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <boost/asio.hpp>
#include <boost/date_time.hpp>
#include <boost/thread.hpp>
boost::asio::io_service io_service;
boost::posix_time::time_duration interval(boost::posix_time::milliseconds(250));
boost::asio::deadline_timer timer(io_service,interval);
void handler(const boost::system::error_code& error);
void timer_init() {
timer.expires_at(timer.expires_at()+interval);
timer.async_wait(handler);
}
void handler(const boost::system::error_code& error) {
static long count=0;
std::cout << "in handler " << count++ << std::endl;
std::cout.flush();
timer_init();
}
int main(int argc, char **argv) {
timer.async_wait(handler);
io_service.run();
std::vector<double> vec;
for (long i=0; i<1000000000; i++) {
double x=std::rand();
std::cout << x << std::endl;
std::cout.flush();
vec.push_back(x);
}
return 0;
}
【问题讨论】:
标签: c++ boost timer boost-asio interrupt