繁体   English   中英

为什么我的工作线程没有收到此信号?

[英]Why does my worker thread not receive this signal?

我有主线程负责GUI,工作线程负责网络摄像头。

我能够从主线程向网络摄像头线程发出信号,但它从未收到! 有人可以解释一下为什么吗?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    setThreadsAndObj();
    setConnects();
    startCamera();

}

void MainWindow::setThreadsAndObj()
{
    cameraClassPtr = new cameraClass();
    cameraThread = new QThread();

}

void MainWindow::setConnects()
{

   ....

    connect(this, &MainWindow::savePicture, cameraClassPtr, &cameraClass::takePicture);


}


void MainWindow::startCamera()
{

    //camera start
    connect( cameraThread, &QThread::started, cameraClassPtr, &cameraClass::getVideoFrame );
    connect( cameraThread, &QThread::finished, cameraClassPtr, &QThread::deleteLater );
    connect( cameraThread, &QThread::finished, cameraThread, &QThread::deleteLater );
    //receive camera frames
    connect(cameraClassPtr, &cameraClass::videoFrameToGui, this, &MainWindow::updateCameraStream);


    //start threads
    cameraClassPtr->moveToThread(cameraThread);
    cameraThread->start();

}


void MainWindow::foo()
{
       emit savePicture();
}


void cameraClass::takePicture()
{

    qDebug()<<"camera class received signal";   //THIS NEVER GETS PRINTED

}

有人可以向我解释为什么我的信号从未收到,而“相机类收到的信号”却从未打印过,如何解决呢?

我的工作线程中有这个循环:

...
static cv::VideoCapture cap(-1);
if( !cap.isOpened() )
{
    qDebug()<< "Could not initialize capturing...\n";
}

qDebug()<<"starting live camera";
cap.set(CV_CAP_PROP_FRAME_WIDTH,240);
cap.set(CV_CAP_PROP_FRAME_HEIGHT,320);

while(1)
{
    cap >> imgFrame;

    int fd = open("/home/John/Desktop/mainImglock.txt", O_RDWR |O_CREAT, 0666);
    int rc = flock(fd, LOCK_EX | LOCK_NB);
    if(rc==0)
    {
        cv::imwrite("/home/John/Desktop/camera.jpg", imgFrame);
    }
    flock(fd, LOCK_UN);
    close(fd);
}

我通过添加以下内容解决了该问题: QApplication::processEvents(); 在while(1)循环中,这样事件循环就不会挂起。

您需要继承QThread并调用QThread :: exec();。 为了处理该线程中的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM