注意:以下代码在普通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::39207Timer... sec::microsec = 1298328680::46773Timer... sec::microsec = 1298328681::54624Timer... sec::microsec = 1298328682::63861Timer... sec::microsec = 1298328683::65740Timer... sec::microsec = 1298328684::69301Timer... sec::microsec = 1298328685::76500Timer... 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不会在到期时被解雇,但会在稍后的时间点被解雇所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)