【问题标题】:How to call a callback function in a thread from Microsoft RPC Server如何从 Microsoft RPC 服务器调用线程中的回调函数
【发布时间】:2017-11-24 20:14:30
【问题描述】:

我的服务器正在尝试从线程中调用 RPC 回调函数。遵循示例 How To Use RPC Callback Functions 并稍微扩展这是我正在尝试做的事情

   [ SAMPLE.IDL ]
   [
      uuid(9FEE4F51-0396-101A-AE4F-08002B2D0065),
      version(1.0),
      pointer_default( unique )
   ]

   {
       void RPCProc( [in, string] unsigned char *pszStr );
       [callback] void CallbackProc([in,string] unsigned char *pszStr);
   }


   [ SAMPLEC.C (Client)]
     void CallbackProc( unsigned char *pszString )
     {
       printf("Call from server, printed on client: %s", pszStr );
     }


   [ SAMPLES.C (Server)]
     DWORD WINAPI thread(LPVOID lp)
     {
       CallbackProc(lp);
       return 0;
     }

     void RPCProc( unsigned char *pszStr )
     {
       // WORKS
       CallbackProc(pszStr);

       // WORKS
       thread(pszStr);

       // Exception: 0x000006A6  binding handle invalid
       HANDLE h = CreateThread(NULL, 0, thread, pszStr, 0, NULL);
       WaitForSingleObject(h, INFINITE);
     }

当 CallbackProc 在线程内被调用时,就是抛出异常的时候。

【问题讨论】:

  • 当你在创建线程中所做的只是等待新线程终止时,为什么还要创建一个线程?为什么不直接调用异常处理函数呢?
  • 这是一个简单的视图。我的代码做得更多。如果你运行这个示例,它会抛出异常。

标签: c multithreading winapi rpc


【解决方案1】:

也许晚了,但我认为问题在于调用回调的信息是每个线程的。每次调用服务器时,服务器都会创建一个线程并将绑定句柄链接到该线程。如果您添加了只能在客户端请求期间调用回调的事实,那么您不能在与等待客户端请求的线程不同的线程中调用回调是合理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2012-02-06
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多