• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

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

lj9852 2002-05-17 02:23:10
我想当键盘钩子过程截获组合键后我的主程序就开始执行一个模块,在钩子里使用PulseEvent(),在主程序里waitforsingleobject(),比如

在钩子中
if(按键==组合键)
PulseEvent();

主程序中
waitforsingleobject();
do something

查了msdn,无奈英文太烂,看不大懂,请问具体怎么使用?请指教,谢谢
...全文
49 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
iamshuke 2002-05-19
使用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;
}
....
}
回复
lj9852 2002-05-18
解决了,谢谢
回复
duhualin 2002-05-17
可靠棵
回复
iamshuke 2002-05-17
用命名对象吧,在不同进程间也可以实现同步。
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)来作标记。
回复
lj9852 2002-05-17
又回到vc来转转……
回复
heartliubin 2002-05-17
我想你最好做一个内存映像文件,来传递这个CEvent事件.
回复
lj9852 2002-05-17
CEvent在哪里声明?我的键盘钩子是做在dll里的,需要共享区吗
回复
kary 2002-05-17
申明一个全局或类对象中的CEvent e;

A线程
WaitForSingleObject(e,INFINITE);
B线程:
if(按键==组合键)
e.PulseEvent();
回复
lj9852 2002-05-17
vc版没人理,到c++版来碰碰运气
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-17 02:23
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……