停止线程由QtConcurrent :: run启动?

Seb*_*ldt 5 qt multithreading qtconcurrent

是否可以通过其关联的QFuture对象来停止线程?目前我一直在开始这样的视频捕捉过程.

this->cameraThreadRepresentation = QtConcurrent::run(this,&MainWindow::startLiveCapturing);
Run Code Online (Sandbox Code Playgroud)

在startLiveCapturing-Method内部运行一个无限循环,捕获图像并显示它们.因此,如果用户想要停止该过程,则只需按下按钮即可停止该操作.但似乎我不能通过调用这样的取消方法来阻止这个线程?

this->cameraThreadRepresentation.cancel();
Run Code Online (Sandbox Code Playgroud)

我做错了什么,我怎么能停止该线程或操作.

Tim*_*yer 7

QtConcurrent :: run的文档:

请注意,QtConcurrent :: run()返回的QFuture不支持取消,暂停或进度报告.返回的QFuture只能用于查询运行/完成状态和函数的返回值.

您可以做的是按下按钮在主窗口中设置布尔标志并构建您的无限循环,如下所示:

_aborted = false;

forever    // Qt syntax for "while( 1 )"
{
    if( _aborted ) return;

    // do your actual work here
}
Run Code Online (Sandbox Code Playgroud)