1

我已经实现了一个 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();  
}
4

0 回答 0