Qt键盘驱动CPU占用过高

2014-11-24 08:52:05 ? 作者: ? 浏览: 1

最近实现了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;


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;
}


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


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


//~End~


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: