2011-12-20 70 views
4

本质上我需要一种方式来启动亚微秒线程睡眠,如parknanos所做的那样。什么是Java的LockSupport.parknanos的.NET等价物?

Thread.Sleep似乎只能精确到毫秒。

+2

你能告诉我们你需要等待不到1微秒? – sisve 2011-12-20 19:51:07

+1

@Simon Svensson:也许OP需要这样做,就像* parkNanos *这样的方法,呃...存在! ; ) – TacticalCoder 2011-12-20 20:15:21

+2

'Thread.Sleep'在默认情况下甚至精确到毫秒级。典型值为16ms,除非有人称'TimeBeginPeriod'来缩短它。这是一个窗口限制,而不是.net。如果Java设法以这样的准确度入睡,我会感到惊讶。另一方面繁忙的等待,可以有更高的准确性。 – CodesInChaos 2011-12-20 20:41:59

回答

1
+1

“等待的持续时间因此取决于处理器的速度。” - 不是很可预测...... – Tudor 2011-12-20 20:06:26

+0

也许 - 但它可以让你等待更短的时间间隔。 Thread.Sleep无论如何只能给你100ms左右的精度。另外,您可以使用Diagnostics.StopWatch来衡量您等待了多长时间http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx – 2011-12-20 20:28:06

+1

这样做的主要缺点是它是忙等待。但是随着OP的要求这是一个必要的罪恶。 – CodesInChaos 2011-12-20 20:50:58

0

您可以使用性能定时器

http://msdn.microsoft.com/en-us/library/ff650674.aspx

然而,使用互操作的可能限制了这种方法

+0

我认为'StopWatch'类是基于'QueryPerformanceCounter'的,所以你不需要任何手动互操作。 – CodesInChaos 2011-12-20 20:49:27

+0

@CodeInChaos你是对的 - 我的知识已经老了,我一直在想,框架中必须有一个类,但除了我在旧.net2天中所做的之外,什么都找不到 - 添加它作为答案。 – 2011-12-20 23:12:25

相关问题