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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    用命名对象吧,在不同进程间也可以实现同步。
    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)来作标记。
      

  5.   

    使用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;
    }
    ....
    }