C# 如何延迟1微秒??Sleep最少只能1ms我用for空循环好像不行。。直接被跳过了[解决办法]延迟1微秒的目的是?[
C# 如何延迟1微秒?? Sleep最少只能1ms 我用for空循环好像不行。。直接被跳过了 [解决办法] 延迟1微秒的目的是?[解决办法] 反问一个东西,什么设备可以延迟一微秒?[解决办法] 记录下datetime.now,在while(1)里做减法判断就行了[解决办法] thread.sleep(0.1) ; 呵呵呵呵。。。不知道会不会报错[解决办法] 延迟1微秒? lz这样做的目的是什么[解决办法]
引用: 记录下datetime.now,在while(1)里做减法判断就行了 爱卿言之有理
[解决办法] 引用: thread.sleep(0.1) ; 呵呵呵呵。。。不知道会不会报错 1微秒是百万分之一秒,一纳秒是10亿分之一秒。0.1毫秒不等于一微秒
[解决办法] 需求上写的是需要延迟1微秒的,是什么功能?
[解决办法] thread.sleep(0,1);
休眠。
[解决办法] 引用: 你问我我问谁,需求上他们怎么要求我就怎么做,哪里来的那么多为什么? 你直接让需求来写代码比较好。
[解决办法] 这种需求要直接对CPU时钟来操作才可能做到,C#根本不能直接访问硬件,你说可行吗?
[解决办法] 引用: 引用:你问我我问谁,需求上他们怎么要求我就怎么做,哪里来的那么多为什么? 你直接让需求来写代码比较好。 同意。。。
[解决办法] Windows不是实时操作系统,小于系统时间片调度的延迟没有意义,就算实时操作系统,你也得考虑总线、内存、IO的延迟了。给你的建议就是根本不要延迟,你就和你的客户说延迟了,他们自己想办法验证是不是延迟了1微秒。
顺便说下,1us=0.000001s,也就是一个2GHz CPU 2000个时钟周期。理论上来说,你找一个1时钟周期执行1次的指令(比如nop)执行2000次就可以了。
[解决办法] 引用: Windows不是实时操作系统,小于系统时间片调度的延迟没有意义,就算实时操作系统,你也得考虑总线、内存、IO的延迟了。给你的建议就是根本不要延迟,你就和你的客户说延迟了,他们自己想办法验证是不是延迟了1微秒。 顺便说下,1us=0.000001s,也就是一个2GHz CPU 2000个时钟周期。理论上来说,你找一个1时钟周期执行1次的指令(比如nop)执行2000…… 曹版主这个回答厉害,不过人家要C#
[解决办法] 引用: 引用: Windows不是实时操作系统,小于系统时间片调度的延迟没有意义,就算实时操作系统,你也得考虑总线、内存、IO的延迟了。给你的建议就是根本不要延迟,你就和你的客户说延迟了,他们自己想办法验证是不是延迟了1微秒。 顺便说下,1us=0.000001s,也就是一个2GHz CPU 2000个时钟周期。理论上来说,你找一个1时钟周期执行1次的指令(比如no…… C#当然也能写出来,问题是这是一个糊鬼的事情,所以根本不需要写。
[解决办法] lz把“需求”翻译为Thread.Sleep,这根本就应该退回给需求去了!
[解决办法] 引用: 我用for空循环好像不行。。直接被跳过了 你让电脑“唉呀”地叫一声算了。
[解决办法] 刚查查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? 那么, 把处理器频率,和 等待的微秒数,换算下
[解决办法] 唉不知道的说
[解决办法] 话说这个1微秒有什么意义呢。 引用曹版主的话:让客户自己去验证延时时间[解决办法] 罕见的需求。 是否需求理解有误,或是需求编号有误。[解决办法] 真奇葩,1微妙 ,根本无法区别[解决办法] 哈哈,这个精度对C#来说没有意义的[解决办法] 一个方法是取CPU周期,以前C++做过,编成库调用也许可以……但是事实上这个精度上随便几个代码就影响了,意义不大;另外一个方法就是专门的高精度计时器硬件触发…… 工业上毫秒级就算高精度了,不知道精度这么高有啥用。如果是特殊用途就需要特殊硬件,而不是随便说需求这样……需求不合理上帝也没办法啊。[解决办法] 你一上位机,防止总线冲突你延1ms对本机毫无影响,对防止BC又足够的不能再足够了。。 你既然不懂硬件,那么就试试,我建议你就延迟1ms,虽然这根本是脱裤子放屁,但人问起来你至少能说你做了,而且运行起来毫无鸭梨。。[解决办法]
引用: 一个方法是取CPU周期,以前C++做过,编成库调用也许可以……但是事实上这个精度上随便几个代码就影响了,意义不大;另外一个方法就是专门的高精度计时器硬件触发…… 工业上毫秒级就算高精度了,不知道精度这么高有啥用。如果是特殊用途就需要特殊硬件,而不是随便说需求这样……需求不合理上帝也没办法啊。 最低端的单片机程序都要按微秒来考虑,不知道你的毫秒精度在工业上能起什么作用。。。[解决办法] 搜索 RTX 实时驱动