歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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