我想在不到1毫秒的时间内调用线程睡眠。我读到,thread.SleepWindows-OS 都不支持。
thread.Sleep
有什么解决方案?
对于所有想知道为什么我需要这样做的人:我正在进行压力测试,并且想知道我的模块每秒可以处理多少条消息。所以我的代码是:
// 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毫秒之间)。
Thread.Sleep(1)
通常,Windows并非设计为实时操作系统。在Windows的普通(台式机/服务器)版本上通常无法实现这种控制。
通常可以得到的最接近的结果是旋转并消耗CPU周期,直到达到所需的等待时间(以高性能计数器衡量)。但是,这非常糟糕- 您会吃光整个CPU,即使那样,您有时还是会被操作系统抢占,并有效地“睡眠”超过1毫秒…