C++ boost::asio::deadline\u计时器持续触发

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秒完成一次,一切正常 现在轮到麻烦了。当我第一次启动程序进程时,在嵌入式环境中编译并运行时

我实现了一个ios对象,它在截止时间计时器过期时调用处理程序。我很肯定这是正确的

普塞多:

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。