线程连接函数阻塞调用线程
boost::thread join function blocks calling thread
问题1:我读到,当你在创建一个线程后调用join时,它会阻塞调用它的线程,直到线程函数返回。我试图建立一个多客户端服务器,可以接受客户端,并为每一个创建线程。问题是,在第一个客户端加入并创建它的线程并调用join之后,侦听线程会挂起,直到完成。我能做些什么来使这个线程运行而不阻塞调用线程?(在c#中,我只调用Start(),调用线程保持正常运行)。
问题2:一般来说(我可能错过了什么),为什么有人想要一个阻塞线程?这有什么意义?调用一个普通的函数不是更容易更快吗?
如果有人能告诉我如何实现同样的事情,就像c#中的线程,这将是伟大的!
提前感谢!对不起,我的英语不好。
我怎么做才能使这个线程运行而不阻塞调用线程
您可以创建线程,然后在其上调用detach()
,这样如果线程尚未终止,thread
对象的析构函数就不会抛出异常。老实说,我建议在采用这种"即发即弃"的设计之前三思而后行。在c++ 11中,你可能想要调用std::async
(在这种情况下,你可能想看看这个问题& a,其中提出了一个解决该函数当前缺点的方法)。
在一般情况下(我可能错过了什么),为什么有人想要一个阻塞线程?这有什么意义?调用一个普通的函数不是更容易更快吗?
好吧,如果你的程序除了等待任务完成没有其他事情可做,那么是的,我会说,只使用同步调用。但也可能是这样的情况:您的程序想要并行地执行某些操作,一旦完成,它可能需要等待异步计算结束才能继续执行。在这种情况下,它需要与线程连接。
- 不要调用join()。只有当你想确保线程已经完成执行时才加入线程(例如,当你销毁拥有线程的连接管理器类时,你想确保线程已经完成执行)。
- 何时调用join()参见答案1。
相关文章:
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 非静态成员失败的线程调用函数
- 线程调用的函数对对象删除是否安全?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 由并发无序映射查找线程调用的函数是否安全?
- 如何从另一个线程调用颤振引擎方法
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 从多个线程调用 std::shuffle
- std::thread::join() 可以从非父线程调用吗?
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 带参数的线程调用库函数
- 如何在本机C++中跨线程调用(在主线程上回调)
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 优雅断言函数不是从多个线程调用的
- 从第二个线程调用Qt信号有效 - >对连接的插槽没有影响
- 包装标准::线程调用函数
- 从 Visual C++ 2010 中的单独线程调用消息框