C++ 何时使用boost线程连接函数?

C++ 何时使用boost线程连接函数?,c++,boost,join,C++,Boost,Join,我最近使用boost::bind函数创建了一个线程 目前,我正在将线程显示到stdout。如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任何输出 为什么会这样 我希望我不必使用join函数,因为我想多次调用这个函数,而不必等待之前启动的线程完成 谢谢你的回复。我真正想确定的是线程是否实际执行。所以我添加了一个系统调用来触摸一个不存在的文件,然后它就在那里了,所以线程确实执行了 如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任

我最近使用boost::bind函数创建了一个线程

目前,我正在将线程显示到stdout。如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任何输出

为什么会这样

我希望我不必使用join函数,因为我想多次调用这个函数,而不必等待之前启动的线程完成

谢谢你的回复。我真正想确定的是线程是否实际执行。所以我添加了一个系统调用来触摸一个不存在的文件,然后它就在那里了,所以线程确实执行了

如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任何输出。为什么会这样

这很可能是系统中标准输出缓冲方式的副作用。您是否有
'\n'
和/或
endl
散布在每个打印语句中?这将强制输出(
endl
将另外刷新流)

如果您查看的文档,您会看到调用此函数是为了等待线程终止。当一个线程被终止(或者就此而言,一个进程)时,所有缓冲输出都被刷新

您不需要等到线程完成执行后才能看到输出。至少有两种方法可以实现这一目标(我记得我的脑海里都有):

  • 使
    cout
    /
    stdout
    无缓冲,或
  • 使用
    \n
    fflush(stdout)
    (用于C样式I/O)或
    std::endl
    流操纵器

默认情况下,线程对象的析构函数不连接到主线程,可能是主线程在线程刷新其输出之前终止并关闭STDOUT

请注意,在C++0x中,线程的默认析构函数是连接的(而不是像boost中那样分离),因此不会发生这种情况(请参阅)


注意:由于这是编写的,C++11标准已更改,未连接的线程现在将终止进程。

也许您应该重新表述“调用以终止线程”。join不会终止线程,但会使当前线程等待调用join方法的线程。我相信您已经知道了。“等待调用join方法的那一个终止。”(因此需要一个编辑注释按钮。)这可能有助于显示一些示例代码。我猜您的
main()
可能会在线程打印之前退出。调用
join
使
main
等待线程完成。在C++0x中,线程的析构函数不“join”。如果线程在销毁时仍然可以连接,那么运行时将终止应用程序。