WinCE 控制台和驅動通訊

來源:互聯網
上載者:User

//=====================================================================================================
//AUTHOR:
//  norains
//DATE:
//  Saturday 25-Feb-2006
//=====================================================================================================
控制台有不少組件,是直接和驅動通訊的,其過程一般如此(以建立一個"MyBacklightChange"事件為例子):
1.驅動初始化,並建立一個線程,線上程內部建立一個通訊的事件
 Class MyDriver
 {
  ....
  private:
   void MyInit();
    //一個線程處理常式,注意在這裡必須聲明為static,否則編譯(PB4.1)的時候會出錯,不知道為什麼
   static DWORD WINAPI MyBacklightChangeThreadProc(PVOID pArg);
  ....
 }

 //驅動初始化函數:
 MyDriver::MyInit()
 {
  ....
  
  //-------------------------------
    //建立一個線程
    HANDLE hMyThread;
    DWORD dwMyThreadID;
    //CreateThread函數調用之後,會進入到線程處理函數MyBacklightChangeThreadProc裡面去
    hMyThread=CreateThread(NULL,0,MyBacklightChangeThreadProc,0,0,&dwMyThreadID);
    //由於MyBacklightChangeThreadProc是一個死迴圈,所以一般不會執行到關閉線程這段
    if(hMyThread!=NULL)
    {
     CloseHandle(hMyThread);
    }
   
  ....
 }
 
 
2.在驅動線程內部的死迴圈體調用WaitForSingleObject()函數進行等待
 DWORD WINAPI SocLcd::MyBacklightChangeThreadProc(PVOID pArg)
{
 //建立一個背光燈事件,事件名稱要與控制台建立的事件名相同
 HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, L"MyBacklightChange");

 //死迴圈,不斷接受資訊
 while(true)
 {
   //如果控制台不發送訊號,則此線程會一直停留在WaitForSingleObject處
   WaitForSingleObject(hEvent, INFINITE);
   //-------------------------------------------------------------------------
   //只有獲得訊號之後,才會往這裡執行
   //在這裡執行相關操作,比如:讀寫註冊表,操作寄存器等等
   //-------------------------------------------------------------------------
 
 }
 CloseHandle(hEvent);
 return 0;
}

3.接下來,我們來看看控制台如何發送訊號

DWORD SendEvent()
{
   //在這裡建立一個事件,注意:此事件的名稱必須要和驅動接收的名稱相同,否則驅動無法擷取訊號
   HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, L"MyBacklightChange");
   if (hEvent != NULL)
   {
    //發送訊號
    SetEvent(hEvent);
    CloseHandle(hEvent);
    return TRUE;
   }  
   return FALSE;
}

windows ce下的控制台和硬體打交道的組件就是採用此機制和驅動進行通訊,唯一多出之處,就是組件會寫註冊表,然後再發送訊號;驅動接到訊號之後,先讀註冊表,根據讀取的數值對硬體進行操作.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.