#include <thread>
using namespace std;
void longFunc(){
//stuff
}
void startThread(){
thread t(longFunc);
}
int main(void){
startThread();
//lots of stuff here...
return 0;
}
完成startThread()
后, t 尝试被删除,但失败。我怎样才能做到这一点?
#include <thread>
using namespace std;
void longFunc(){
//stuff
}
void startThread(){
thread t(longFunc);
}
int main(void){
startThread();
//lots of stuff here...
return 0;
}
完成startThread()
后, t 尝试被删除,但失败。我怎样才能做到这一点?
如果你真的想要一个即发即弃的模式,你可以从线程中分离出来:
void startThread(){
thread t(longFunc);
t.detach();
}
或者,如果您需要加入线程(这通常是合理的事情),您可以简单地std::thread
按值返回一个对象(线程包装器是可移动的):
std::thread startThread()
{
return std::thread(longFunc);
}
无论如何,您可以考虑通过启动线程std::async()
并返回一个future
对象。这将是异常安全的,因为在启动的线程中抛出的异常将被未来对象吞噬,并在您调用get()
它时再次在主线程中抛出:
#include <thread>
#include <future>
void longFunc()
{
//stuff
}
std::future<void> startThread()
{
return std::async(std::launch::async, longFunc);
}
int main(void)
{
auto f = startThread();
//lots of stuff here...
// For joining... (wrap in a try/catch block if you are interested
// in catching possible exceptions)
f.get();
}