CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

【【【【 请问怎么使用 CEvent 系统对象?谢谢 】】】】

楼主lj9852(Loading)2002-05-17 14:23:10 在 VC/MFC / 基础类 提问

我想当键盘钩子过程截获组合键后我的主程序就开始执行一个模块,在钩子里使用PulseEvent(),在主程序里waitforsingleobject(),比如  
   
  在钩子中  
  if(按键==组合键)  
          PulseEvent();  
   
  主程序中  
  waitforsingleobject();  
  do   something  
   
  查了msdn,无奈英文太烂,看不大懂,请问具体怎么使用?请指教,谢谢 问题点数:50、回复次数:9Top

1 楼lj9852(Loading)回复于 2002-05-17 17:05:50 得分 0

vc版没人理,到c++版来碰碰运气Top

2 楼kary(BCBuider回复)回复于 2002-05-17 17:10:15 得分 20

申明一个全局或类对象中的CEvent   e;  
   
  A线程  
  WaitForSingleObject(e,INFINITE);  
  B线程:  
  if(按键==组合键)  
          e.PulseEvent();Top

3 楼lj9852(Loading)回复于 2002-05-17 17:16:20 得分 0

CEvent在哪里声明?我的键盘钩子是做在dll里的,需要共享区吗Top

4 楼heartliubin(bin)回复于 2002-05-17 17:34:35 得分 5

我想你最好做一个内存映像文件,来传递这个CEvent事件.Top

5 楼lj9852(Loading)回复于 2002-05-17 19:18:10 得分 0

又回到vc来转转……Top

6 楼iamshuke()回复于 2002-05-17 19:27:02 得分 25

用命名对象吧,在不同进程间也可以实现同步。  
  HANDLE   h=CreateEvent(NULL,TRUE,FALSE,"HY-gsk-3AC01994-FD16-4F4F-9BA7-20020123CC76");  
  dwRet=GetLastError();  
  if(dwRet==ERROR_ALREADY_EXISTS)//该命名对象已存在  
  {  
          if(WaitForSingleObject(h,0)==WAIT_TIMEOUT)//处于ResetEvent()状态  
          {  
          }  
  }  
   
  可以用SetEvent(h)和ResetEvent(h)来作标记。Top

7 楼duhualin(白桦林)回复于 2002-05-17 22:01:42 得分 0

可靠棵Top

8 楼lj9852(Loading)回复于 2002-05-18 00:43:57 得分 0

解决了,谢谢Top

9 楼iamshuke()回复于 2002-05-19 19:43:07 得分 0

使用CreateEvent,你可以创建一个命名对象,该命名对象在系统中是唯一的。   例如我在进程A中创建了一个命名对象"MyEvent200205201918",那么在进程B中创建同一名称的命名对象时,GetLastError()会返回ERROR_ALREADY_EXISTS,意思是该命名对象己经存在。这返回的句柄将指向你在进程A中的命名对象。也就是说进程A和进程B中的两个HANDLE指向了同一个对象。你可以用这两个句柄中的任一个改变(或获得)命名对象的状态。  
   
  例1,我要在进程A中启动进程B,然后进程A等待进程B完成某项工作后才继续。  
   
  进程A:  
       
  HANDLE   h=CreateEvent(NULL,TRUE,FALSE,"HY-gsk-3AC01994-FD16-4F4F-9BA7-20020123CC76");  
  启动进程B;  
  if(WaitForSingleObject(h,600000)==WAIT_TIMEOUT)//等待进程B触发该Event,1分钟后若进程B没有动作就超时。  
  {  
      //进程B没有完成工作  
  }  
   
   
  进程B:  
   
  ....  
  完成某项工作  
  ....    
  HANDLE   h=CreateEvent(NULL,TRUE,FALSE,"HY-gsk-3AC01994-FD16-4F4F-9BA7-20020123CC76");  
  SetEvent(h);//进程A将继续  
   
  例2:保证某一时刻只运行应用程序的一个实例。  
   
  BOOL   CMyApp::InitInstance()  
  {  
  //创建一命名内核对象,如果该对象已存在,说明本程序已运行了一个实例,退出。BOOL   CAaaaaaApp::InitInstance()  
  {  
  AfxEnableControlContainer();  
   
  HANDLE   h=CreateEvent(NULL,TRUE,FALSE,"Example-3AC01994-FD16-4F4F-9BA7-A5F27AE8CC76");  
  DWORD   dwRet=GetLastError();  
  if(dwRet==ERROR_ALREADY_EXISTS)  
  {  
  return   FALSE;  
  }  
  ....  
  }Top

相关问题

  • 如何使用CEvent对象!
  • 如何使用系统消息传递对象,或字符串?
  • 求教关于同步对象的使用``如CEvent``哪里有关于这些的资料?
  • 请教,在使用对象属性或方法时系统给出的中文提示的问题。
  • 怎样使用commandbuilder对象?
  • 如何使用ADO.STREAM对象?
  • 怎样使用Request对象?
  • 如何使用FileSystemObject对象
  • 关于Mis系统的打印对话框的实现, 以及Printer对象的使用, 懂的朋友请进。。。急呀
  • 在使用New 对一个引用进行实例化之后,系统还报对象没有被实例化的错误, 请指教

关键词

  • 命名
  • null
  • 进程
  • 对象
  • cevent
  • 钩子
  • gsk
  • createevent
  • 组合键
  • 主程序

得分解答快速导航

  • 帖主:lj9852
  • kary
  • heartliubin
  • iamshuke

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo