我想从给定的根目录中递归地查找具有给定扩展名的文件,并显示当前在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()运行该函数。写入线程安全变量以更新进度。
你能告诉我如何选择最好的吗? 我已经阅读了一些"解决方案"但是我想了解为什么你应该使用一种方法而不是另一种方法。
此外,由于我正在查找文件,因此我可能会有一个目录,其中许多文件都符合搜索条件。所以这意味着很多中断。对此有什么特别要记住的吗?
谢谢!
答案 0 :(得分:1)
据我所知(希望更多可以加入)。 QThread通过信号交互提供支持。例如,您可以使用信号停止并发功能。如果有的话,不确定你如何使用其他选项。
要记住的事项:小部件都必须存在于主线程中,但可以通过信号与其他线程进行通信。插槽。
关于这个主题的另一个快速线索w /一些体面的要点。 https://qt-project.org/forums/viewthread/50165/
祝你的项目好运,欢迎来到Qt!