Qt中的线程
Threading in Qt
我在互联网上读到,子类化(从Qthread派生类)然后重写run函数来执行所需任务不是使用Qthread的正确方式。但是我在一些书和Qt文档中读过使用子类化的方法吗?
你能告诉我为什么不应该使用子类化的方法吗?将Qthread子类化是一种简单的线程使用方法(对我来说,因为我是一个初学者)。
谢谢。
请参阅Christoph Eckert的这篇关于QThread:The great QThread Mess的精彩文章,这篇文章让我现在以这种方式使用QThread:Bradley T.Hughes 的Threading without The headless
一句话:IMHO,使用QThread最简单的方法是创建一个QObject子类,使用信号/插槽,并使用moveToThread
使对象生活在具有不同事件循环的不同线程中
不幸的是,如果您绝对需要"while(true)"
类型的线程,这是不起作用的,但在Qt中通常是可以避免的。
QThread是设计的,旨在用作操作系统线程的接口或控制点,而不是放置要在线程中运行的代码的地方。我们面向对象的程序员子类化是因为我们想扩展或专门化基类的功能。我能想到的将QThread子类化的唯一有效原因是添加QThread没有的功能,例如,可能提供一个指向内存的指针用作线程的堆栈,或者可能添加实时接口/支持。下载文件、查询数据库或进行任何其他类型处理的代码不应添加到QThread的子类中;它应该封装在自己的对象中。
有关更多详细信息,请查看。。
http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/
QThread文档明确指出子类化是正确的做法:
要创建自己的线程,请使用子类
QThread
并重新实现run()
。
不过,这有点令人费解,因为(正如shobi在另一个答案中指出的那样)这是一个丑陋的设计,而且还有另一种解决方案。
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 将对象传递给多线程对象 Qt
- Qt 在另一个线程中无限循环
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- Qt::D irectConnection在多线程环境中使用时如何工作?
- 如何在Qt中合并/追加/添加两个用于线程的模型?
- 在 C++ 的 Qt 中使用 WINAPI 线程时出现问题
- Qt - 如何从线程创建 QFuture
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 谷歌语音识别不起作用,因为冲突线程Qt C++
- 信号/插槽多线程 Qt
- 无法在另一个线程-QT中向对象发送已发布的事件
- 无法为处于不同线程(Qt)中的父级创建子级
- 如何同时运行两个线程?Qt C++
- 多线程Qt应用程序在退出时不会停止
- 在单独的线程 Qt 中渲染屏幕外小部件
- 我如何在另一个线程Qt显示MessageBox