C++ std::线程成员对象在terminate中销毁时崩溃
我有一个程序,我想在一个单独的线程中运行我的一个类,该线程的优先级高于程序的其余部分,我希望它在处理GUI时更新GUI,所以我使用C++ std::线程成员对象在terminate中销毁时崩溃,c++,c++11,stdthread,C++,C++11,Stdthread,我有一个程序,我想在一个单独的线程中运行我的一个类,该线程的优先级高于程序的其余部分,我希望它在处理GUI时更新GUI,所以我使用std::thread GUI.h #include <thread> class GUI { private: Worker worker; std::thread workerThread; public: GUI (); ~GUI (); void runWorker (); } class Worker {
std::thread
GUI.h
#include <thread>
class GUI
{
private:
Worker worker;
std::thread workerThread;
public:
GUI ();
~GUI ();
void runWorker ();
}
class Worker
{
public:
void run ();
}
Worker.h
#include <thread>
class GUI
{
private:
Worker worker;
std::thread workerThread;
public:
GUI ();
~GUI ();
void runWorker ();
}
class Worker
{
public:
void run ();
}
Worker.cpp
GUI::GUI ()
{
}
GUI::~GUI()
{
}
void GUI::runWorker()
{
workerThread = std::thread (&Worker::run, worker);
}
void Worker::run ()
{
unsigned int numItems = 70;
for (unsigned int i = 0 ; i < numItems ; i++)
{
try
{
processItem (i);
}
catch (exception &e)
{
std::cout << "Error processing item " << i << std::endl;
break;
}
}
}
void Worker::run()
{
无符号整数=70;
for(无符号整数i=0;istd::terminate()
。根据需要,调用
.join()
或.detach()
以有序结束
或者升级到C++20,它引入了连接而不是终止。将std::terminate()
在销毁时,如果它管理线程。根据需要,调用
.join()
或.detach()
以有序结束
或者升级到C++20,它引入了连接而不是终止。它会崩溃,因为您从未加入线程。
如果*它有一个关联的线程(joinable()==true),则调用std::terminate()。
它会崩溃,因为您从未加入线程。如果*它有一个关联的线程(joinable()==true),std::terminate()被调用。
我的印象是,线程::join会一直阻塞,直到辅助进程完成。我不希望它阻塞,因为我希望GUI检查active,所以如果我进行分离,我的辅助进程将处于“非托管”状态所以线程不会终止?是的,你知道分离和连接之间的区别。我的印象是,thread::join会一直阻止,直到Worker完成。我不希望它阻止,因为我希望GUI检查activeSo,所以如果我分离,我的Worker将是“非托管的”所以线程不会终止?是的,你知道分离和连接的区别。