QTimer与单个线程

时间:2009-10-30 05:57:57

标签: c++ qt multithreading

我的程序真正消耗的CPU时间比我想要的多得多(2个显示器将其拍摄高达80-90%)。我正在使用Qtimers,其中一些只有2ms。在任何给定的时间,每个显示器可以有12个以上的定时器 - 2ms,2ms,2ms,250ms,其余的在200ms和500ms之间。如果我将线程用于部分或全部(特别是短线程),会不会更好?它会有很大的不同吗?

2 个答案:

答案 0 :(得分:2)

主要时间问题将出现在高优先级计时器上。首先要确保你真的需要每2ms一次,其次要克服QTimer类中的一些开销,你可以将3个2ms的超时分组为一个,每次它关闭时只需按顺序执行3个代码段。我不认为线程会解决这个问题。

答案 1 :(得分:1)

2毫米接缝怀疑我。人们多年来一直以19200波特(例如486硬件)读取和写入串行端口,而不会使CPU过载。也许你的做法是错误的。

您使用什么API来访问端口?我听起来像是在轮询它们,如果api支持阻塞的读取和写入,这将是一个更好的方法。

最简单的方法是将读取和写入放在自己的线程中,并在循环中使用阻塞读取,然后只有当有数据要读取并处理它时,线程才会忙。您的应用程序应该知道它何时需要写入,因此正确的线程应该等待一个条件变量,当数据可用时,触发这个条件唤醒写入线程。

可能更简单的单线程方法,因为我确信第一个在串行端口上读写的应用程序(例如x调制解调器)不是多线程的,但我不知道它们但是它们应该记录在api你正在使用。