我已经实现了一个 ios 对象,该对象在截止日期计时器到期时调用处理程序。我很确定这是正确完成的。
普塞多:
localScheduler(_localSchedulerIO)
_localSchedulerIO.poll()
while (1)
{
_localSchedulerIO.reset()
_localSchedulerIO.poll()
}
好的......所以这适用于i686。截止时间计时器每 15 秒完成一次,一切都很好。
现在擦。当我第一次在嵌入式环境上编译和运行时,我启动了程序进程,我得到了持续的“就绪”run() 处理程序。这是不可取的。更奇怪的是……我运行该程序的第二次按预期工作(15 秒)!哼..
任何人都知道可以通过运行一次 boost::asio 来满足依赖关系吗?
开发文件丢失?
更多详细信息:更新:在这里使用 time_traits 派生有帮助吗?
Scheduler::Scheduler(ba::io_service& io) :
,timer_ (io, seconds(SCHEDULER_TIMER))
{
timer_.async_wait(boost::bind(&Scheduler::run, this, _1));
}
void Scheduler::run(const boost::system::error_code& error)
{
if (!error)
{
// DO SOMETHING
// reset timer -- now a run loop
timer_.expires_at(timer_.expires_at() + seconds(SCHEDULER_TIMER));
//timer_.expires_at((pt::second_clock::local_time() + seconds(SCHEDULER_TIMER)));
timer_.async_wait(boost::bind(&Scheduler::run, this, _1));
} // timer error
}
Class Scheduler
{
// timer run
protected:
ba::deadline_timer timer_;
}
// main process
MainProcess::MainProcess() :
, _localScheduler(_localSchedulerIO)
{
}
// scheduler asio
DefaultLogSink().Info("Starting Scheduler server\n");
_localSchedulerIO.run_one(); // blocks until first timer expiry
DefaultLogSink().Info("Scheduler server started\n");
while (1)
{
_localSchedulerIO.reset();
_localSchedulerIO.poll_one();
}