Thread.Sleep,求助高手解答线程抢占CPU的机制
最近在做音频网络传输的项目,遇到了很奇怪的问题,希望有大侠可以帮助解答一下。
需求:
上位机要实时发送MP3数据流到下位机,走的UDP通信,每一包发送512字节,固定码率为128kbps的Mp3需要每32ms发送一包数据到下位机。
程序处理:
程序中开一个单独线程来读取文件并发送数据,关键的代码如下:
while(true)
{
byte[] data=new byte[512];
fileStream.Read(data,0,512);
udpClient.send(data,0,512,target);
Thread.Sleap(32);
}
问题:
大多数情况都是没问题的,用抓包工具抓出来的数据显示在32ms左右一包,但是有几个别MP3文件发送的频率却实47ms一包,导致终端播放的时候卡顿。如果这个时候在PC上开一个播放器,或者开一个网页,那么发送的频率就正常了,关闭播放器,或者网页,发送的频率又变成47ms了。而且在有的机器上还没有这个问题,这个真是搞不懂了,求求各位大侠能够不吝赐教啊。