C ++让一个提升线程等待1秒钟

时间:2009-04-22 14:54:11

标签: c++ multithreading boost

我使用以下方法创建了一个提升线程: 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它也不起作用。我已经尝试了其他几种方法,但我似乎无法使其工作。有什么我做错了吗?有没有更简单的方法来实现我的目标?

3 个答案:

答案 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()内吗?