小弟在写一个动态库的时候碰到下面的问题。
动态库提供一个GET()接口并通过SOCKET和其他程序连接,调用GET()的时候,需要返回一个有效的数值。可是这个有效的数值可能需要等待一段时间才能从SOCKET送回来,我的意思是调用GET()函数的时候,直到有正确的值才返回。但不论用SLEEP
,WaitForSingleObject(),都会堵塞在GET函数那里,而不会从SOCKET收数。
怎么办,各位大狭快救救我。最好不要叫我开线程哦。

解决方案 »

  1.   

    我用的是CAsyncSocket收数,怎么开线程呢?
    extern "C"
    __declspec(dllexport) int __stdcall GET()
    {
         if (WaitForSingleObject(m_hEventData,5000)==WAIT_TIMEOUT)
    //本意是想等待事件发生,但堵塞在这里事件永远不会发生
         {
               return 0;
         }
         data=....//取值
         return data;
    }
      

  2.   

    不对,当有数据来时,AsyncSocket本身自己会开辟一个线程接收数据.所以不用开辟,应该是你用法不对,
      

  3.   

    可能是m_hEventData这个资源冲突了.
      

  4.   

    你一进这个函数, 就wait, 那当然是要超时了, 如果这儿设置超时, 那么在其它的地方, 比如说接收到消息时, 就应有release释放掉才对啊, 否则只有等待超时了
      

  5.   

    资源冲突?我把m_hEventData做为全局变量和AsyncSocket自己的变量都不行啊。
      

  6.   

    意思说你不能在接收数据时 wait m_hEventData