问题是这样的:我的一个服务器进程向客户进程提供服务,客户进程向服务器注册以后就可以进程间通讯来使用服务器提供的服务(客户进程可以是任意程序,只要按照指定的规则就可以了,因此它们可能是各种不同的程序),如果一个客户进程退出就需要从服务器注销它的数据。
问题是如果客户进程不主动向服务器注销就会产生问题(如客户进程异常退出等)。我想可能有一种方法就是用SOCKET:client 和 server 建立连接以后,如果client终止,socket会被断开,服务器就可以知道了。(不知道可不可行)
另外如果进行有父子关系就可以在父进程中用WaitForSingleObject在一个线线程中等待子进程句柄从而达到效果,但是如何在两个进程间建立父子关系(不能在父进程中使用CreateProcess来创建子进程)?

解决方案 »

  1.   

    laiyiling(陌生人) :不明白,能否说清楚一点?
      

  2.   

    qrlvls(≌AIR⌒LIKE ≤空气≥) :规则全部自定义。
      

  3.   

    to DentistryDoctor:OpenProcess +WaitForSingleObject 在NT下可以正常使用,但在98下就不行了.
    必须在OpenProcess中指定SYNCHRONIZE标志才行啊,这个标志只在NT中才有效。
      

  4.   

    如果连接建立后,不通信是不知道网络已经断开的,未设置Keep-Alive的情况下,除非你用send发了一个包出去,这时候一般会超时或者有其他的错误,会返回错误。所以,要检测网络连接状况,发包才能知道,每隔一段时间发一个包以检测网络情况,即所谓“心跳”。这里网络中的做法,你也可以类似的采用定时通信的方法。
      

  5.   

    问题已经解决,经过多次试验,除了在一个副线程中轮询外好象没有更好的办法。
    现在我是这样做的:在client中用当前时间(GetTickCount)作为ID创建一个命名Mutex(就是这个ID转换后得到的字符串),并将这个ID发送到server,主线程在一个监视线程中每隔一段时间就去偿试用这个名字打开该命名Mutex,如果存在则表明该客户进程还在,否则表明该Client已经退出。当前成功打开后还需要立即关闭该Mutex。
    不知道各位大侠还有没有更好一点的办法?
    晚上结贴!