Обработка и удаление QThread в цикле

У меня есть класс, который унаследован от 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();
}

Проблема в том, что класс содержит много памяти, и он не кажется уничтоженным, пока цикл еще работает. Таким образом, программа вылетает вскоре после накопления памяти (например, утечка памяти). Я также попытался использовать «delete classa», что, конечно, приведет к сбою программы.

Кто-нибудь знает, как правильно запустить и удалить такой класс в цикле, чтобы он не занимал память постоянно.

Цикл for также находится в другом потоке. Таким образом, существует иерархия потоков, где цикл обработки событий может быть ключевым при вызове deleteLater ()? Код слишком сложен для написания, но самый быстрый ответ, который мне нужен, может быть, как правильно удалить объект Qthread в среде с многопоточностью (то есть правильно использовать eventloop), чтобы не было утечки памяти (или, скорее, наращивания памяти как объект Qthread не удаляется)

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
}
0

Другие решения


По вопросам рекламы [email protected]