最近實現了Qt的自定義鍵盤,雖然可以使用,但是CPU佔用總是很高,將近100%。
調查可以發現Qt的鍵盤事件監控是通過QSocketNotifier實現的。
m_notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
connect (m_notifier, SIGNAL(activated(int)), this, SLOT(remoteDataIncoming()));
解決方法如下:
在驅動中加入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~