【问题标题】:C++ Letting a boost thread wait for 1 secondC ++让boost线程等待1秒
【发布时间】:2009-04-22 14:54:10
【问题描述】:

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

【问题讨论】:

  • 需要更多信息 - 这会在 xtime_get 行崩溃?如果是这样,当您手动设置 xt 时它是如何崩溃的(或者它只是没有按照您的意愿行事)?
  • 在尝试手动设置 xt.sec 时以何种方式不起作用? xt.sec = 1 可能是一个非常短的时间,因为我认为 sec 至少以毫秒为单位。如果是这样,你会睡一毫秒。
  • boost.org/doc/libs/1_38_0/doc/html/thread/… 看起来最新版本的库现在使用来自 boost::date_time 的组件来指定持续时间。
  • 希望你不要像我一样忘记包含头文件

标签: c++ multithreading boost


【解决方案1】:

有没有更简单的方法

也许是这样的:

boost::this_thread::sleep(boost::posix_time::seconds(1));

罢工>

boost::thread::sleep(boost::posix_time::seconds(1));

【讨论】:

  • 你的第二种方式(我首先尝试过的)不起作用......第一种很好
【解决方案2】:

boost::xtime_get() 看起来像是少数没有在标头中实现的 Boost API 之一,因此这可能类似于没有正确编译 Boost 库。这可能有点像调用约定不匹配之类的。我不知道您可能需要执行哪些步骤来重建库 - 我在 Boost 中使用的所有内容都只需要标头。

如果您只是跟踪到xtime_get() 例程,即使它是在程序集级别,它也可能会有所帮助。 xtime 结构非常非常基本,xtime_get() 实际上除了调用特定于平台的 API 来获取插入到 xtime 结构中的数字之外什么都做不了。

【讨论】:

    【解决方案3】:

    使用该代码(例如,不知道你把它放在哪里),我只能说xtime_get 方法返回返回的度量的类型。也就是说,您必须确定,例如,以下断言成立:

    int res = boost::xtime_get(&xt, boost::TIME_UTC);
    assert(res == boost::TIME_UTC);
    

    在您的系统中可能会发生这种情况。

    但是,再次查看代码,我想到崩溃可能与此调用无关,而是与您在应用程序中执行的其他操作有关。同样,这取决于您在哪里使用此代码。它在您的线程的operator() 内吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多