我使用以下方法创建了一个提升线程: boost :: thread thrd(& connectionThread); connectionThread是一个简单的void函数。但是,当我尝试让它等待几秒钟时,这很好用,例如使用:
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += 1;
boost::thread::sleep(xt); // Sleep for 1 second
程序在xtime_get行崩溃。即使手动尝试设置xt.sec它也不起作用。我已经尝试了其他几种方法,但我似乎无法使其工作。有什么我做错了吗?有没有更简单的方法来实现我的目标?
答案 0 :(得分:26)
是否有更简单的方法
也许是这些方面的东西:
boost::this_thread::sleep(boost::posix_time::seconds(1));
<击> 撞击>
<击>boost::thread::sleep(boost::posix_time::seconds(1));
击> <击> 撞击>
答案 1 :(得分:2)
boost::xtime_get()
看起来像是少数未在标头中实现的Boost API之一,所以这可能就像没有正确编译Boost库一样。这可能有些类似于不匹配的调用约定或其他东西。我不知道你可能需要经历哪些步骤来重建库 - 我在Boost中使用的所有东西都只需要标题。
如果您只是跟踪xtime_get()
例程,即使它在汇编级别,也可能会有所帮助。 xtime
结构是非常非常基本的,xtime_get()
实际上除了调用特定于平台的API以使数字插入xtime
结构之外没有做任何其他事情。
答案 2 :(得分:0)
使用该代码(例如,不知道你把它放在哪里),我只能说xtime_get
方法返回返回的度量的类型。也就是说,你必须确定,例如以下断言成立:
int res = boost::xtime_get(&xt, boost::TIME_UTC);
assert(res == boost::TIME_UTC);
在您的系统中可能会发生这种情况。
然而,再次查看代码时,我想到崩溃可能与此调用无关,而是与您在应用程序中执行的其他操作有关。同样,这取决于您使用此代码的位置。它在你的主题的operator()
内吗?