0

我有一个从 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 对象没有被删除)

4

1 回答 1

0

在你重新实现的情况下,你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
}
于 2014-09-01T14:40:35.010 回答