当我像这样使用 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/