Thread.Sleep少于1毫秒

我想在不到1毫秒的时间内调用线程睡眠。我读到,thread.SleepWindows-OS 都不支持。

有什么解决方案?

对于所有想知道为什么我需要这样做的人:我正在进行压力测试,并且想知道我的模块每秒可以处理多少条消息。所以我的代码是:

 // Set the relative part of Second hat will be allocated for each message 

//For example: 5 messages - every message will get 200 miliseconds

var quantum = 1000 / numOfMessages;

for (var i = 0; i < numOfMessages; i++)

{

_bus.Publish(new MyMessage());

if (rate != 0)

Thread.Sleep(quantum);

}

我很高兴得到您的意见。

回答:

你做不到 单个睡眠呼叫通常会阻塞Thread.Sleep(1)一秒以上(它取决于操作系统和系统,但以我的经验,通常会阻塞12到15毫秒之间)。

通常,Windows并非设计为实时操作系统。在Windows的普通(台式机/服务器)版本上通常无法实现这种控制。

通常可以得到的最接近的结果是旋转并消耗CPU周期,直到达到所需的等待时间(以高性能计数器衡量)。但是,这非常糟糕-

您会吃光整个CPU,即使那样,您有时还是会被操作系统抢占,并有效地“睡眠”超过1毫秒…

以上是 Thread.Sleep少于1毫秒 的全部内容, 来源链接: utcz.com/qa/407713.html

回到顶部