【问题标题】:Handling and deleting QThread in a loop循环处理和删除 QThread
【发布时间】:2014-06-11 04:00:40
【问题描述】:

我有一个继承自 QThread 的类(我们称之为 ClassA),它在 for 循环中运行,如下所示:

for(int i=0;i<somenumber;i++)
{
    ClassA* classa = new ClassA();

    classa->execute(); // just a normal direct function call

    classa->exit();
    classa->deleteLater();
}

问题在于类包含大量内存,并且在循环仍在运行时似乎没有被破坏。所以程序会在内存建立后很快崩溃(如内存泄漏)。我也尝试使用“删除类”,这当然会使程序崩溃。

任何人都知道如何在循环中正确运行和删除此类类,以免它不断占用内存。

for 循环也位于另一个线程中。所以有一个线程层次结构,其中事件循环可能是调用 deleteLater() 的关键?代码写起来有点太复杂,但我想要的最快答案可能是如何在线程环境中正确删除 Qthread 对象(即正确使用 eventloop),因此没有内存泄漏(或者更像是内存构建为Qthread对象没有被删除)

【问题讨论】:

  • 代码写起来有点复杂,但我想要的最快答案可能是如何在线程环境中正确删除Qthread对象(即正确使用eventloop),这样就不会出现内存泄漏(或者更像是由于 Qthread 对象未被删除而建立的内存)

标签: c++ multithreading memory qthread qeventloop


【解决方案1】:

如果你重新实现了run(),你总是可以wait() 让线程完成。 我假设您的方法execute() 调用start()。 然后你可以直接删除它(使用你的示例代码):

for(int i=0;i<somenumber;i++)
{
    ClassA* classa = new ClassA();

    classa->execute(); // just a normal direct function call

    classa->exit();
    classa->wait(); // wait till the QThread is finished
    delete classa; // immediately free resources
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多