VB 2010按名称杀死线程

时间:2011-11-09 10:23:54

标签: vb.net multithreading

在我的多线程服务器应用程序中,每个客户端的线程都以这种方式生成:

    While (True)
        counter += 1
        clientSocket = serverSocket.AcceptTcpClient()
        log.debug("Client No: " + Convert.ToString(counter) + " started!")
        Dim client As New handleClinet
        clients.Add(clientSocket)
        client.startClient(clientSocket, Convert.ToString(counter))
    End While

和handleClinet:

    Public Sub startClient(ByVal inClientSocket As TcpClient, ByVal clineNo As String)
        Me.clientSocket = inClientSocket
        Me.clNo = clineNo
        Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
        ctThread.Name = "client" + clineNo
        ctThread.Start()
    End Sub

如您所见,该线程的名称为client1,client2等。当用户注销时,会将命令与clientID一起发送到服务器。但是,如何杀死特定的客户端进程?

类似的东西:

Public Sub killClient(ByVal clientID As Int32)
    'Code to kill "client"+clientID
End Sub

1 个答案:

答案 0 :(得分:2)

线程只是执行工具。每当你认为你需要推动一个线程时,请考虑线程正在做什么。当你不再需要医生时,你就不会杀了他。你离开他的办公室。

如果要干净地关闭客户端,请在客户端结构中设置“shutdown”标志。让处理客户端的代码定期检查此标志。忘掉什么线程正在做什么,这是你要关闭的客户端

如果太被动,请关闭与客户端的TCP连接。这将导致任何触及客户端连接的代码出错。

忘记它碰巧是一个处理客户端的专用线程。 编写了代码。对它进行编码,以便在处理客户端之前,通过检查是否适合处理客户端来停止处理客户端。