使用boost多线程在后台运行一个函数

时间:2015-03-12 12:46:12

标签: c++ multithreading boost boost-thread

我想使用boost创建一个多线程C ++程序。我想要做的是调用一个函数Alpha,它会休眠并打印出一些消息。虽然正在处理该功能,即睡眠,但我希望我的主程序能够继续。所以,我希望Alpha在后​​台运行,而不会中断main功能。

这是我的代码:

void Alpha()
{
    std::cout << "Starting sleep." << std::endl;
    sleep(5);
    std::cout << "Sleep over." << std::endl;
}   

int main()
{
    std::cout << "A" << std::endl;
    boost::thread threadAlpha(Alpha);
    threadAlpha.join();
    std::cout << "B" << std::endl;
}

我得到的输出是:

A
Starting sleep.
Sleep over.
B

但是,我希望线程在后台运行,这样它就不会导致主循环等待。因此,我期待输出为:

A
Starting sleep.
B
Sleep over.

或者可能:

A
B
Starting sleep.
Sleep over.

为什么这不符合我的预期?

2 个答案:

答案 0 :(得分:0)

join确实等待线程完成。所以你的“B”打印线正在等待。在连接线之前移动irt。

int main()
{
  std::cout << "A" << std::endl;
  boost::thread threadAlpha(Alpha);
  std::cout << "B" << std::endl;
  threadAlpha.join();
}

答案 1 :(得分:0)

调用join将等待线程完成。在你完成所有工作之前不要这样做,并且需要等待线程。