我有一个正在侦听端口的TCP / IP线程(主线程)。当TCP / IP请求到来时,我产生一个线程来处理请求。如果工作线程是CPU BOUND(想象一个从1到1000000的循环什么都不做),我就不能接收另一个tcp / ip请求.SO不会给监听线程一个切片时间。
我该如何解决这个问题?这是一个实施问题吗?当tcp / ip数据包进入tcp / ip堆栈时,SO必须给监听线程一个切片时间吗?
谢谢!
答案 0 :(得分:1)
在工作线程中使用WinAPI函数SwitchToThread()
或Sleep(0)
,以便将其时间片放弃到系统中的其他线程/进程。或者在Delphi中,使用TThread.Yield
。