我想使用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.
为什么这不符合我的预期?
答案 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
将等待线程完成。在你完成所有工作之前不要这样做,并且需要等待线程。