Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android设备上的Boost Asio deadline_timer不会在到期时被解雇,但会在稍后的时间点被解雇大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在尝试在 Android设备上使用boost asio deadline_timers.我们有一个要求,我们需要每100毫秒发射一个计时器.我使用了如下代码.然而,计时器似乎每1秒被发射一次.我们应该如何在Android系统中微调,以便提升asio截止时间计时器按预期工作?

注意:以下代码在普通Linux系统上按预期工作.是什么让它在Andorid系统上的工作方式不同?

码:

void print(asio::deadline_timer* ptimer,const asio::error_code& err)
{

 struct timeval tval;

 if(0 == gettimeofday(&tval,NULL))
 {
  std::cout <<" Timer...  sec::microsec = "<<tval.tv_sec<<"::"<<tval.tv_usec<< std::endl;
 }
 else
 {
    std::cout <<" Timer...  gettimeofday Error!" << std::endl;
 }

 ptimer->expires_from_Now(boost::posix_time::milliseconds(100));
 ptimer->async_wait(boost::bind(&print,ptimer,asio::placeholders::error));


}

在Android设备上输出

Timer...  sec::microsec = 1298328679::39207
Timer...  sec::microsec = 1298328680::46773
Timer...  sec::microsec = 1298328681::54624
Timer...  sec::microsec = 1298328682::63861
Timer...  sec::microsec = 1298328683::65740
Timer...  sec::microsec = 1298328684::69301
Timer...  sec::microsec = 1298328685::76500
Timer...  sec::microsec = 1298328686::85768

解决方法

您可能希望确保您的Android环境最终定义了BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK.

如果你看看boost / asio / time_Traits.hpp中的认timer_Traits,你会看到如果没有定义,asio会使用second_clock作为它的计时器.

此定义来自boost / date_time / compiler_config.hpp,以BOOST_HAS_GETTIMEOFDAY或BOOST_HAS_FTIME为条件.举个例子,大概应该定义前者.

我不知道android是否被认为是自己的平台,或者如果boost将其检测为linux.在boost / config / platform / linux.hpp中,它被定义为:

//
// If glibc is past version 2 then we definitely have
// gettimeofday,earlier versions may or may not have it:
//
#if Defined(__GLIBC__) && (__GLIBC__ >= 2)
#  define BOOST_HAS_GETTIMEOFDAY
#endif

这可能是你想为android添加额外条件的地方.

大佬总结

以上是大佬教程为你收集整理的Android设备上的Boost Asio deadline_timer不会在到期时被解雇,但会在稍后的时间点被解雇全部内容,希望文章能够帮你解决Android设备上的Boost Asio deadline_timer不会在到期时被解雇,但会在稍后的时间点被解雇所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。