Stop Thread started by QtConcurrent::run?

后端 未结 2 599
清酒与你
清酒与你 2021-01-12 14:48

Is it possible to stop a Thread by its associated QFuture Object ? Currently i\'ve been starting a video capturing process like this.

this->cameraThreadRe         


        
相关标签:
2条回答
  • 2021-01-12 15:13

    Why don't you create a boolean flag that you can test inside your capturing loop and when it is set, it jumps out and the thread exits?

    Something like:

    MainWindow::onCancelClick() // a slot
    {
        QMutexLocker locker(&cancelMutex);
        stopCapturing = true;
    }
    

    And then for your threaded function:

    MainWindow::startLiveCapturing()
    {
       forever
       {
    
           ...
           QMutexLocker locker(&cancelMutex);
           if (stopCapturing) break;
       }
    
    }
    
    0 讨论(0)
  • 2021-01-12 15:26

    From the documentation of QtConcurrent::run:

    Note that the QFuture returned by QtConcurrent::run() does not support canceling, pausing, or progress reporting. The QFuture returned can only be used to query for the running/finished status and the return value of the function.

    What you could do is have a button press set a boolean flag in your main window and build your infinite loop like this:

    _aborted = false;
    
    forever    // Qt syntax for "while( 1 )"
    {
        if( _aborted ) return;
    
        // do your actual work here
    }
    
    0 讨论(0)
提交回复
热议问题