c++ - Qt 似乎使用了很多线程

标签 c++ linux multithreading qt

我经常使用 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/

相关文章:

c++ - 在各自的线程上运行多个对象似乎多次运行同一个对象

某些特定用例的 C++ 原子内存排序

c++ - GetWindowText() 返回空字符串和奇怪的错误

java - Java 1.5 有 fork join 框架的 backport-util 吗?

带有 "watchdog"的 Ruby 线程

linux - 一系列文件的 pscp 命令

c++ - Set() 和 Get() 的重载括号运算符

c++ - 如何在 SQLite 中传递用于触发函数的变量?

linux - 关于 i2c 设备驱动程序的困惑

linux - Bash - 终端错误 : "-bash: export: ` GOPATH~/usr/go': not a valid identifier"