C++ boost::asio::deadline\u计时器持续触发
我实现了一个ios对象,它在截止时间计时器过期时调用处理程序。我很肯定这是正确的 普塞多:C++ boost::asio::deadline\u计时器持续触发,c++,timer,boost-asio,C++,Timer,Boost Asio,我实现了一个ios对象,它在截止时间计时器过期时调用处理程序。我很肯定这是正确的 普塞多: localScheduler(_localSchedulerIO) _localSchedulerIO.poll() while (1) { _localSchedulerIO.reset() _localSchedulerIO.poll() } 好的。。。这在i686上有效。截止时间计时器每15秒完成一次,一切正常 现在轮到麻烦了。当我第一次启动程序进程时,在嵌入式环境中编译并运行时
localScheduler(_localSchedulerIO)
_localSchedulerIO.poll()
while (1)
{
_localSchedulerIO.reset()
_localSchedulerIO.poll()
}
好的。。。这在i686上有效。截止时间计时器每15秒完成一次,一切正常
现在轮到麻烦了。当我第一次启动程序进程时,在嵌入式环境中编译并运行时,我会得到连续的“就绪”run()处理程序。这是不可取的。更奇怪。。我第二次运行该程序时,它可以正常工作(15秒)!哼
有人知道可以通过运行一次boost::asio来满足依赖关系吗
开发文件丢失
更多详细信息:更新:在这里使用时间有帮助吗
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();
}
最有可能的情况是您遇到了竞争条件或其他UB。请发布实际代码,而不是伪代码。还有,什么是嵌入式环境?我在搜索,并认为从时间特性中获得可能是一个好主意,然而,我仍在努力。这里有更有用的信息:由于有效的过期时间是偏移量,而不是绝对值,我会检查是否在使用。此外,描述嵌入式环境的时间源也很有价值。我观察过各种嵌入式系统,在第一次使用时间进行时间校准时,会出现增量时间跳跃。谢谢Tanner。我试试看。嵌入式环境(ppc)启动时没有rtc,但随后使用ntp。