以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- TCP连接,阻塞式的怎么停止线程? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=194302) |
-- 作者:zhenghangbo -- 发布时间:2024/11/26 13:35:00 -- TCP连接,阻塞式的怎么停止线程? 下面的代码是在全局代码中的,其中标红的是阻塞式的,如果没有客户端连接他会一直等。如何启动线程后,一直没等到客户端,但是又要停止线程? Public Sub getData() Dim ip As String = forms("Mainform").Controls("ip").text Dim ipAddress As System.Net.IPAddress = System.Net.IPAddress.Parse(ip) Dim port As Integer = 8081 Dim listener As New System.Net.Sockets.TcpListener(ipAddress, port) listener.Start() Dim clients As New System.Collections.Concurrent.ConcurrentDictionary(Of String, System.Net.Sockets.NetworkStream) \' 存储已连接的客户端及其网络流 Try Do While True \'\' 等待客户端连接,阻塞式的,如何停止 Dim client As System.Net.Sockets.TcpClient = listener.AcceptTcpClient() \' ........ ....... client.Close() Loop End Sub) acceptThread.Start() Catch ex As Exception Forms("Mainform").Controls("TextBox_log").text= Forms("Mainform").Controls("TextBox_log").text & vbcrlf & "Error: " & ex.Message Finally \' 确保监听器被关闭 listener.Stop() End Try End Sub 线程启动代码 Dim newthread As New System.Threading.Thread(AddressOf GetData) vars("newthread") = newthread newthread.IsBackground = True newthread.Start() 停止线程代码,一执行这个代码整个foxtable程序就卡死了,因为那个阻塞的代码一直在等待。 If vars("newthread") IsNot Nothing Then stoprfid = False \' 设置停止标志 vars("newthread").Abort vars("newthread").Join() \' 等待线程结束 End If |
-- 作者:有点蓝 -- 发布时间:2024/11/26 13:44:00 -- 试试:https://blog.51cto.com/u_15127642/4845422 |