C# 如何延迟1微秒??
Sleep最少只能1ms
我用for空循环好像不行。。直接被跳过了
[解决办法]
延迟1微秒的目的是?
[解决办法]
反问一个东西,什么设备可以延迟一微秒?
[解决办法]
记录下datetime.now,在while(1)里做减法判断就行了
[解决办法]
thread.sleep(0.1) ;
呵呵呵呵。。。不知道会不会报错
[解决办法]
延迟1微秒?
lz这样做的目的是什么
[解决办法]
爱卿言之有理
[解决办法]
1微秒是百万分之一秒,一纳秒是10亿分之一秒。0.1毫秒不等于一微秒
[解决办法]
需求上写的是需要延迟1微秒的,是什么功能?
[解决办法]
thread.sleep(0,1);
休眠。
[解决办法]
你直接让需求来写代码比较好。
[解决办法]
这种需求要直接对CPU时钟来操作才可能做到,C#根本不能直接访问硬件,你说可行吗?
[解决办法]
同意。。。
[解决办法]
Windows不是实时操作系统,小于系统时间片调度的延迟没有意义,就算实时操作系统,你也得考虑总线、内存、IO的延迟了。给你的建议就是根本不要延迟,你就和你的客户说延迟了,他们自己想办法验证是不是延迟了1微秒。
顺便说下,1us=0.000001s,也就是一个2GHz CPU 2000个时钟周期。理论上来说,你找一个1时钟周期执行1次的指令(比如nop)执行2000次就可以了。
[解决办法]
曹版主这个回答厉害,不过人家要C#
[解决办法]
C#当然也能写出来,问题是这是一个糊鬼的事情,所以根本不需要写。
[解决办法]
lz把“需求”翻译为Thread.Sleep,这根本就应该退回给需求去了!
[解决办法]
你让电脑“唉呀”地叫一声算了。
[解决办法]
刚查查msdn,C# 还是提供了类似的参数机制来调用的,不过就准确度而言,惨不忍睹。
public static void SleepTest()
{
int count = 1000;
SleepTest(count, 10);
SleepTest(count, 1000);
}
private static void SleepTest(int count, long ticks)
{
TimeSpan ts = new TimeSpan(ticks);
long m_startTime = Stopwatch.GetTimestamp();
for (int i = 0; i < count; i++)
{
System.Threading.Thread.Sleep(ts);
//System.Threading.Thread.Sleep(1);
}
Console.WriteLine("Run {0} times for {1} seconds.", count, (Stopwatch.GetTimestamp() - m_startTime) / (double)Stopwatch.Frequency);
}
在我机器上,上面2个的时间差不多;
可如果用 SleepTest(count, 10000);
就要15多秒,和用 Sleep(1) 差不多。
[解决办法]
凡是 Sleep 系列的, 都不可靠.
应该用 Thread.SpinWait
Spin 就是空操作. 像API, BOOL WINAPI InitializeCriticalSectionAndSpinCount
各种,轻量级的 同步,包括 .net的 ReaderWriterLock, 都有 Spin
具体,要等待几个iterations? 那么, 把处理器频率,和 等待的微秒数,换算下
[解决办法]
唉不知道的说
[解决办法]