Я работаю над Qt 5.5 и создал отдельный поток, который использует сторонние библиотеки API. Эта функция Api, которая при выполнении потребляет все ресурсы и не позволяет выполнять какую-либо другую функцию в этом потоке.QT -> как убить поток, если поток потребляет все ресурсы и не разрешает выполнение слота
Этот новый поток начинается нажатием кнопки «Начать», и я просто не знаю, как остановить или убить поток, когда я нажимаю кнопку остановки. Ниже приведен пример моего примера
threadWorking = new QThread();
workHeavy = new WorkingHard;
workHeavy->moveToThread(threadWorking);
connect(threadWorking, SIGNAL(started()), workHeavy, SLOT(slotStartStream()));
connect(workHeavy, SIGNAL(sigStopStream()), threadWorking, SLOT(quit()));
connect(workHeavy, SIGNAL(sigStopStream()), workHeavy, SLOT(deleteLater()));
connect(threadWorking, SIGNAL(finished()), threadWorking, SLOT(deleteLater()));
connect(workHeavy, SIGNAL(sigStartStream()), this, SLOT(slotTrueStreamRun() ));
connect(workHeavy, SIGNAL(sigStopStream()), this, SLOT(slotFalseStreamRun()));
connect(this, SIGNAL(sigMopsCamStopCmd()), workHeavy, SLOT(slotStopStream()));
threadWorking->start();
Also// void WorkingHard::slotStartStream()
{
g_main_loop_run(gloop); // this consumes all resources.
}
void WorkingHard::slotStopStream()
{
// clean up mess
g_main_loop_quit(gloop);
gst_element_set_state (pipeline, GST_STATE_NULL);
// g_main_loop_quit(gloop);
releaseMemory();
}
Прошу посоветовать мне убить нить на основе идентификатора или чего-то еще. Ясно одно: я не могу войти в поток, когда функция запущена.
Как люди предложили использовать terminate. Если я использую terminate(), мне все равно нужно освободить память, как я указал в файле slotStopStream ??
Пример вашего примера далеко не полный и минимальный, если требуется. Тем не менее, исследуйте термин «аннулирование потока» и почему это проблематично. Альтернативным может быть использование другого процесса. –
Вы должны показать свой рабочий цикл WorkingHard. Вот где вы должны поместить обнаружение для завершения потока, но трудно советовать, не зная, какой у вас код. – hyde
Как люди предложили прекратить. Если я использую terminate(), мне все равно нужно освободить память, как я указал в функции slotStopStream ?? – samprat