【发布时间】:2016-07-07 04:01:18
【问题描述】:
我经常使用 Qt,但最近需要调试我一直在创建的线程并发现比我预期的更多的线程。
所以我的程序只是一个简单的控制台(无 GUI)Qt 应用程序(Linux)。
我创建的线程:
- 它有一个 main()(执行 QtCoreApplication)——所以它是主线程。
- 用于处理从 com 端口接收到的数据的线程(使用 FTDI D2XX 第三方代码驱动程序)
仅此而已。当我执行 ps -T... 并找到我的应用程序时,有 7 个线程。我有两个使用信号和插槽的 QObjects 类,所以也许它们每个都需要一个线程来处理消息,这需要我到 4 个线程......所以我不知道为什么我的应用程序可能有 7 个线程。
谁能解释更多关于发生了什么?如果需要可以发布代码。请注意,我只在代码中使用一次new QThread(目前)。
【问题讨论】:
-
我无法想象为什么 Qt 会在没有被要求的情况下创建额外的线程,尤其是在没有 GUI 的情况下,但也许他不是罪魁祸首。尝试禁用线程的创建,也许是 FTDI 驱动程序创建了其他 3。
-
此外,AFAIK 信号 + 用于正常事件(如按钮单击)的插槽也不需要额外的线程。它们在事件循环中处理。
-
Qt 应用程序确实会产生大量线程,尤其是 GUI 应用程序。
-
@FabioCeconello 这是真的,但给人的印象是错误的。 “正常”形容词是不必要的。没有所谓的“非正常”事件。此外,信号槽机制和事件是完全不同的两件事。
-
@VioletGiraffe 嗯,没有。好吧,Qt 不这样做,不过用户代码当然是免费的。
标签: c++ linux multithreading qt