歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Qt鍵盤驅動CPU占用過高

Qt鍵盤驅動CPU占用過高

日期:2017/3/1 10:04:52   编辑:Linux編程

最近實現了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 >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~

Copyright © Linux教程網 All Rights Reserved