none
c# winform服务端如何关闭某一个特定的子线程 RRS feed

  • 问题

  • 我在服务端开启监听。每次有客户端连接到服务端时,服务端都会开启一个独立线程与其通信。

    #region 启动相应的与客户端通信的线程
         clientThread = new Thread(new ParameterizedThreadStart(Receive_Process));
         clientThread.Start();
    #endregion

    --------------------------------------------------------------------------------------------------

    然后很多用户连接后,就开启了很多这样的子线程

    问题是:当某一个用户退出时(或者我手动断开某一个用户时),服务端如何关闭与那一个用户相对应的线程?


    loveym
    2010年7月27日 0:50

答案

  • 你在你启动的接受线程中检查是否断开,如果断开退出即可,不需要什么特别实现。

    或者,你订阅你的关闭连接事件,关闭后利用某个tag标记查找你开的线程,然后主动abort。这个比较麻烦。一般用在限制总线程个数的情况。


    family as water
    2010年7月27日 1:55
  • 1.如果客户端是被主动关闭的,可以向服务器端发送一个报文,告诉服务器当前自己关闭。服务器然后根据报文解析协议关闭当前线程。

    2.如果是程序被强制关闭,服务器端会触发接收事件,收到字节长度为0.

    3.如果网线掉了,该种情况需要通过心跳来管理。

    2010年7月27日 2:00
  • 当一个线程做完所有该做的事情,已经没有事情可做了的时候,会自动结束。

    检测连接是否已经断开的工作应该让分配给对应客户端的线程来做。

    服务器端“手动”断开用户的时候工作线程也可以发现状态变更,并自动结束。

     

    不知道你的程序使用了什么样的协议,但只要不是基于UDP,让工作线程检测或者等待连接状态改变都应该是很简单的事情才对,不应该需要太多的代码量来达到这个目的。


    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    2010年8月1日 18:31

全部回复

  • 你在你启动的接受线程中检查是否断开,如果断开退出即可,不需要什么特别实现。

    或者,你订阅你的关闭连接事件,关闭后利用某个tag标记查找你开的线程,然后主动abort。这个比较麻烦。一般用在限制总线程个数的情况。


    family as water
    2010年7月27日 1:55
  • 1.如果客户端是被主动关闭的,可以向服务器端发送一个报文,告诉服务器当前自己关闭。服务器然后根据报文解析协议关闭当前线程。

    2.如果是程序被强制关闭,服务器端会触发接收事件,收到字节长度为0.

    3.如果网线掉了,该种情况需要通过心跳来管理。

    2010年7月27日 2:00
  • 当一个线程做完所有该做的事情,已经没有事情可做了的时候,会自动结束。

    检测连接是否已经断开的工作应该让分配给对应客户端的线程来做。

    服务器端“手动”断开用户的时候工作线程也可以发现状态变更,并自动结束。

     

    不知道你的程序使用了什么样的协议,但只要不是基于UDP,让工作线程检测或者等待连接状态改变都应该是很简单的事情才对,不应该需要太多的代码量来达到这个目的。


    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    2010年8月1日 18:31