gpt4 book ai didi

c++ - Qt:在不继承QThread的情况下如何清理它?

转载 作者:行者123 更新时间:2023-12-01 14:44:58 25 4
gpt4 key购买 nike

如果我有使用QThread这样的最标准代码:

myClass* object = new myClass();
QThread* worker = new QThread();
object->moveToThread(worker);
worker->start();

那么删除对象的正确方法和退出工作线程的正确方法是什么?

如果我不删除对象,则会发生内存泄漏。

如果我不退出工作程序,则在关闭应用程序时,会警告说QThread仍在运行时被销毁。

最佳答案

要删除object对象,可以将QThread::finished对象的 worker 信号连接到QObject::deleteLater对象的 object 插槽。

要退出线程,可以在类的析构函数中调用 QThread::quit QThread::wait (或在需要停止线程时进行调用)。

MyClass::~MyClass()
{
thread->quit();
thread->wait();
...
}

要删除 worker对象,您可以为其设置一个父对象,或使其成为自动成员变量。您也可以为其使用智能指针。

顺便说一句,您的命名约定有点奇怪。在您的情况下, QThread对象不是工作程序,它仅管理线程。 myClass对象将是您的情况下的工作程序。

关于c++ - Qt:在不继承QThread的情况下如何清理它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com