我有两个程序, 一个是作为Windows服务程序,里面可创建4块共享内存,通过一个信号量来管理客户端的连接使用。
    我的问题是如果客户端申请后没有正常退出,那么信号量就得不到释放,从而相应的共享内存就不能供其它客户端使用了。本来想使用SEH处理的,但调试时提示:
warning C4509: nonstandard extension used: '****Func' uses SEH and '****iter' has destructor。 
    我在***Func使用了一个容器指针。按提示说法SEH不能和有析构函数的类同时使用。我想问一下这种情况下如何保证我的信号量可以正确释放呢?

解决方案 »

  1.   

    客户端申请后没有正常退出,
    if(waitforsingleobject(正常退出信号量) == 超时)
    {
    释放信号量
    }仅供参考
      

  2.   

    waitforsingleobject可能可以,再不是就是学网络编程那样,用心跳包机制
      

  3.   

    正常工作情况下, 客户端是一直使用申请的内存,客户端什么时候结束是由用户决定的。 
    服务器端在客户端连接后,会一直等待客户端的消息事件,包括客户端断开连接消息。
    使用等待超时:
    1.等待时间不能确定,也不能设为INFINIT; 
    2.会阻塞服务器工作线程或者得创建一个专门的线程等待。如何判断客户端是异常退出还是正常工作时而没有发送消息呢?
      

  4.   


    +服务端主动问(request)客户端,操作是不是结束了,根据客户端答(response)的结果处理信号量(仅供参考)