c++ - 如何使用 std::thread?

标签 c++ multithreading stdthread

当我像这样使用 std::thread 时:

func()
{
   std::thread(std::bind(&foo, this));
}

线程对象在堆栈中分配,并在 func() 返回时销毁。 所以我尝试像这样使用它:

func()
{
   std::thread* threadPtr = new std::thread(std::bind(&foo, this));
}

我应该在哪里删除threadPtr? 以及如何创建一个最初挂起的线程?

最佳答案

如果想让线程独立运行,需要在对象上使用detach()方法。否则,如果对象在线程仍在运行时被销毁,thread 析构函数将终止您的程序。

线程一创建就开始运行。您不能创建处于挂起状态的线程对象。您可以存储创建线程的参数而不是实际创建它(例如,可能使用 std::function),或者让它阻塞在互斥锁或条件变量上,直到您准备好让它运行。

关于c++ - 如何使用 std::thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29814233/

相关文章:

java - 可靠地停止无响应的线程

c++ - 使用 std::thread 和良好实践并行化循环

c++ - 为什么add函数在c++ 11线程中没有效果?

c++ - OpenGL Nvidia 驱动程序 259.12 纹理不工作

c++ - 为什么我需要在 move 构造函数的初始化列表中使用 std::move?

python - 尝试理解 python 多线程

c++ - 结构消耗太多内存

c++ - 参数包扣减规则是什么

c - 什么更好 : Select vs Threads?