简单的Qt线程机制有进步吗?

时间:2014-12-17 11:53:06

标签: multithreading qt

我想从给定的根目录中递归地查找具有给定扩展名的文件,并显示当前在GUI中找到的文件数。 由于这种处理可能很长,因此可能会阻止GUI。 我可以等待处理结束并获得文件计数,但我正在学习Qt(PyQt),所以我认为这是一种培训。

所以我读过Qt doc: When to Use Alternatives to Threads,我不认为它适合我。

然后我读到: Choosing an Appropriate Approach,我认为我的解决方案是第一个:

  

在另一个线程中运行一个新的线性函数,可选择使用   运行期间的进度更新

但在这种情况下,你有3个选择:

  

Qt提供了不同的解决方案:

     
      
  • 将函数放在QThread :: run()的重新实现中并启动QThread。发出信号以更新进度。 OR
  •   
  • 将函数放在QRunnable :: run()的重新实现中,并将QRunnable添加到QThreadPool。写入线程安全的变量   更新进度。 OR
  •   
  • 使用QtConcurrent :: run()运行该函数。写入线程安全变量以更新进度。
  •   

你能告诉我如何选择最好的吗? 我已经阅读了一些"解决方案"但是我想了解为什么你应该使用一种方法而不是另一种方法。

此外,由于我正在查找文件,因此我可能会有一个目录,其中许多文件都符合搜索条件。所以这意味着很多中断。对此有什么特别要记住的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知(希望更多可以加入)。 QThread通过信号交互提供支持。例如,您可以使用信号停止并发功能。如果有的话,不确定你如何使用其他选项。

要记住的事项:小部件都必须存在于主线程中,但可以通过信号与其他线程进行通信。插槽。

关于这个主题的另一个快速线索w /一些体面的要点。 https://qt-project.org/forums/viewthread/50165/

祝你的项目好运,欢迎来到Qt!