C++ 何时使用boost线程连接函数?
我最近使用boost::bind函数创建了一个线程 目前,我正在将线程显示到stdout。如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任何输出 为什么会这样 我希望我不必使用join函数,因为我想多次调用这个函数,而不必等待之前启动的线程完成 谢谢你的回复。我真正想确定的是线程是否实际执行。所以我添加了一个系统调用来触摸一个不存在的文件,然后它就在那里了,所以线程确实执行了 如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任何输出。为什么会这样 这很可能是系统中标准输出缓冲方式的副作用。您是否有C++ 何时使用boost线程连接函数?,c++,boost,join,C++,Boost,Join,我最近使用boost::bind函数创建了一个线程 目前,我正在将线程显示到stdout。如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任何输出 为什么会这样 我希望我不必使用join函数,因为我想多次调用这个函数,而不必等待之前启动的线程完成 谢谢你的回复。我真正想确定的是线程是否实际执行。所以我添加了一个系统调用来触摸一个不存在的文件,然后它就在那里了,所以线程确实执行了 如果我使用thread.join,我可以看到输出。然而,如果我不这样做,我就看不到任
'\n'
和/或endl
散布在每个打印语句中?这将强制输出(endl
将另外刷新流)
如果您查看的文档,您会看到调用此函数是为了等待线程终止。当一个线程被终止(或者就此而言,一个进程)时,所有缓冲输出都被刷新
您不需要等到线程完成执行后才能看到输出。至少有两种方法可以实现这一目标(我记得我的脑海里都有):
- 使
/cout
无缓冲,或stdout
- 使用
和\n
(用于C样式I/O)或fflush(stdout)
流操纵器std::endl
注意:由于这是编写的,C++11标准已更改,未连接的线程现在将终止进程。也许您应该重新表述“调用以终止线程”。join不会终止线程,但会使当前线程等待调用join方法的线程。我相信您已经知道了。“等待调用join方法的那一个终止。”(因此需要一个编辑注释按钮。)这可能有助于显示一些示例代码。我猜您的
main()
可能会在线程打印之前退出。调用join
使main
等待线程完成。在C++0x中,线程的析构函数不“join”。如果线程在销毁时仍然可以连接,那么运行时将终止应用程序。