我经常使用 Qt,但最近需要调试我创建的线程并发现了比我预期更多的线程。
所以我的程序只是一个简单的控制台(无 GUI)Qt 应用程序 (linux)。
我创建的线程:
- 它有一个 main()(执行 QtCoreApplication)- 所以这是主线程。
- 处理从 com 端口接收到的数据的线程(使用 FTDI D2XX 第三方代码驱动程序)
仅此而已。当我执行 ps -T... 并找到我的应用程序时,有 7 个线程。我有两个使用信号和槽的 QObjects 类,所以也许它们每个都需要一个线程来处理消息,这使我有 4 个线程……所以我不知道为什么我的应用程序可能有 7 个线程。
谁能详细解释一下发生了什么?如果需要可以发布代码。请注意,我在我的代码中只使用了一次 new QThread
(暂时)。
最佳答案
Qt 不创建任何 per-QObject
线程。它出于某些特定于平台的原因创建辅助线程,例如QProcess
有时需要辅助线程。
FTDI D2XX unix 驱动程序使用 libusb,该实现完全向后,并在您为其提供的线程之上使用额外的线程。坦率地说,您不应该在 Linux 或 OS X 上使用 D2XX 驱动程序。只需使用内核驱动程序即可。
您应该简单地在一个普通的非 Qt 测试应用程序中运行 D2XX 驱动程序,该应用程序打开设备并连续读取它并查看它产生了多少线程。你会感到沮丧...
关于c++ - Qt 似乎使用了很多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34902218/