【发布时间】:2012-05-14 20:45:45
【问题描述】:
我有一个这样的线程:
Public Sub StartWork()
Try
myTCPListener.Start()
While StopRequest = False
Dim requestspending As Boolean = m_TCPListener.Pending()
If myTCPListener.Pending = False Then
Threading.Thread.Sleep(100)
Else
DoSomething()
End If
End While
Catch ex As Exception
Throw ex
End Try
End Sub
现在我的问题是:当这里什么都没有发生时,我通过 Thread.Sleep 将线程发送到睡眠模式。这是否会以某种方式影响 TCPListener 的工作以及线程处于睡眠模式时传入的连接会发生什么?
【问题讨论】:
-
是的。代码很奇怪,只有在有人尝试连接时才做 DoSomething。所以不要打扰,只需调用 AcceptSocket 代替,这样您就不必睡觉以避免烧核。
-
问题是,当我在没有 thread.sleep 的情况下运行它时,程序占用了我的 cpu 的 33%(amd x6 现象),而使用 thread.sleep 它只占用了 17%。所以当线程休眠时,连接仍然可以挂起,但不能被接受,我做对了吗?
-
很不清楚如何使用 Thread.Sleep(100) 调用来烧掉 17% 的内核。无论如何,您绝对应该更喜欢从 AcceptSocket 获得的 0%。
标签: .net vb.net multithreading tcp tcplistener