打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WinCE 控制面板和驱动通信 .

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MFC(线程同步与异步套接字,孙鑫
Windows下C++多线程同步与互斥简单运用
VC++ 的串口通讯
C/C 临界量
C++实现线程同步的四种方式总结
串行通信及一个通信演示程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服