WinCE 控制面板和驱动通信

http://blog.csdn.net/norains/article/details/609217

//=====================================================================================================
//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下的控制面板和硬件打交道的组件就是采用此机制和驱动进行通信,唯一多出之处,就是组件会写注册表,然后再发送信号;驱动接到信号之后,先读注册表,根据读取的数值对硬件进行操作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值