这里是我的说明问题,最小expample一些C++代码:如何在boost :: date_time中启用nanoseconds的情况下使用boost :: thread :: timed_join?
// uncomment the next line, to make it hang up:
//#define BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG //needed for nanosecond support of boost
#include <boost/thread.hpp>
void foo()
{
while(true);
}
int main(int noParameters, char **parameterArray)
{
boost::thread MyThread(&foo);
if (MyThread.timed_join(boost::posix_time::seconds(1)))
{
std::cout<<"\nDone!\n";
}
else
{
std::cerr<<"\nTimed out!\n";
}
}
只要我不打开纳秒的支持,预期寄托都工作正常,但只要我去掉所需的#define boost :: posix_time中的纳秒支持,程序不再通过if语句,就像我调用join()而不是timed_join()一样。
现在我已经想通了,发生这种情况是因为BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG将时间戳的实际数据表示从单个64位整数更改为64 + 32位。很多增强的东西都是在头文件中完全实现的,但是线程方法并没有,因为它们不能适应新的数据格式,而没有用合适的选项再次编译它们。由于该代码旨在运行在外部服务器上,编译我自己的boost版本不是一种选择,也不会关闭纳秒支持。
因此我的问题如下:是否有一种方法可以在不使用不兼容的96位posix_time方法的情况下将值(秒数)传递给timed_join()而不需要修改标准boost程序包?
我在Ubuntu 12.04上运行,增加了1.46.1。
请注意,timed_join在最近的boost版本中已弃用。 – inf 2013-02-22 20:14:11