Q_OBJECT
public:
videostream();
~videostream();
private:
VideoCapture cap;
QString killLoopFlag;
public slots:
void killLoop(QString status) { killLoopFlag = status; }
void run(int id);
void Stop(int i);
signals:
void Stream(Mat f);
};
Вот имплементация этого класса
#include "videostream.h"
#include <qdebug.h>
videostream::videostream()
{
}
videostream::~videostream()
{
}
void videostream::run(int id) {
killLoopFlag = "false";
Mat frame;
cap.open(id);
while (cap.isOpened()) {
cap >> frame;
emit Stream(frame);
qDebug() << "CAP "<< id<<" running";
qDebug() << "Status " << killLoopFlag << " fucking";
if (killLoopFlag == "true") {
break;
}
}
}
void videostream::Stop(int i) {
while (true) {
cap.release();
qDebug() << cap.isOpened();
}
}
вот я пытаюсь послать в поток к моему классу сигнал чтобы остановить бесконечный цикл:
connect(stereothread, SIGNAL(started()), signalMapper, SLOT(map()));
signalMapper->setMapping(stereothread, "true");
connect(signalMapper, SIGNAL(mapped(QString)), stereostream, SLOT(killLoop(QString)));
цикл не останавливается
что я делаю не так?
подозрение: что-бы сигнал отработал в контекте потока, нужно что-бы завершился бесконечный цикл
https://doc.qt.io/qt-5/qthread.html#requestInterruption
Обсуждают сегодня