COM事件通知

无:

  • ATL
  • MFC
  • 注意:

  • 客户端正在执行与服务器不同的线程
  • 题:

  • 一旦从COM对象(服务器)收到事件通知,我如何控制客户端的行为?
  • 如何从客户端实现事件接口?
  • 下图:

    hresult = pis8->QueryInterface(
                    __uuidof(IConnectionPointContainer),
                (void **) &pContainer);
    
    //result handling omitted
    
    
    hresult = pContainer->FindConnectionPoint(
                          __uuidof(IS8SimulationEvents),
                          &pConnection);
    
    //result handling omitted
    

    客户端实现事件接口( IS8SimulationEvents )这可以位于单独的组件中,也可以位于客户端组件本身上。 当组件触发事件时调用该实现。

    FindConnectionPoint之后,客户端调用pConnection->Advise ,传递IS8SimulationEvents并接收一个“cookie”。 Cookie需要调用Unadvise ,在清理期间必须调用Unadvise以断开连接。

    如果客户端运行在与服务器不同的线程中,则客户端需要运行消息循环来接收呼叫。


    如果我正确地理解这个问题,似乎客户端需要运行waitloop,类似

    while(!threadCancel)
    {
        DWORD waitResult = WaitForMultipleObjects(actionCount, waitHandles, FALSE, 500);
        switch (waitResult)
        {
            case SERVER_COMMAND_1:
                HandleServerCommand1();
                break;
            ...etc...
            default:
               throw ...
         }
    }
    

    客户端的事件接收器会触发等待句柄,从而有效地让服务器告诉客户端要做什么。

    链接地址: http://www.djcxy.com/p/81299.html

    上一篇: COM event notification

    下一篇: Controlling voltage supply on usb port using c or any programming language