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;


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~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章