Qt键盘驱动CPU占用过高


最近实现了Qt的自定义键盘,虽然可以使用,但是CPU占用总是很高,将近100%。

调查可以发现Qt的键盘事件监控是通过QSocketNotifier实现的。

m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
connect (m_notifier, SIGNAL(activated(int)), this, SLOT(remoteDataIncoming()));

问题就出在这里,说明驱动一直可以读取,导致一直调用Read函数。而QSocketNotifier的activated(int)信号是根据驱动poll函数返回的状态触发的,自己的驱动未加入该函数。

解决方法如下:

在驱动中加入poll函数,按键按下的时候才将mask设置为mask |= POLLIN | POLLRDNORM;

<SPAN style="FONT-SIZE: 12px">unsigned int s3c_key_poll (struct file *filp, struct poll_table_struct *wait)
{
 unsigned int mask = 0;
 if(readl(GPLDAT))
 {
  mask |= POLLIN | POLLRDNORM; /* 表示数据可获取 */
 }
 return mask; 
}</SPAN>

其实驱动我不熟悉,遇到了才去解决,当然驱动的阻塞和非阻塞还不太懂,在这里简记一下,方便以后整理。

哎,总是觉得自己知道的太少了。

//~End~

相关内容