读书人

C# 怎么延迟1微秒?

发布时间: 2013-03-01 18:33:02 作者: rapoo

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微秒有什么意义呢。

引用曹版主的话:让客户自己去验证延时时间C# 怎么延迟1微秒?
[解决办法]
罕见的需求。

是否需求理解有误,或是需求编号有误。


[解决办法]
真奇葩,1微妙 ,根本无法区别
[解决办法]
哈哈,这个精度对C#来说没有意义的
[解决办法]
一个方法是取CPU周期,以前C++做过,编成库调用也许可以……但是事实上这个精度上随便几个代码就影响了,意义不大;另外一个方法就是专门的高精度计时器硬件触发……
工业上毫秒级就算高精度了,不知道精度这么高有啥用。如果是特殊用途就需要特殊硬件,而不是随便说需求这样……需求不合理上帝也没办法啊。
[解决办法]
你一上位机,防止总线冲突你延1ms对本机毫无影响,对防止BC又足够的不能再足够了。。


你既然不懂硬件,那么就试试,我建议你就延迟1ms,虽然这根本是脱裤子放屁,但人问起来你至少能说你做了,而且运行起来毫无鸭梨。。
[解决办法]

引用:
一个方法是取CPU周期,以前C++做过,编成库调用也许可以……但是事实上这个精度上随便几个代码就影响了,意义不大;另外一个方法就是专门的高精度计时器硬件触发……
工业上毫秒级就算高精度了,不知道精度这么高有啥用。如果是特殊用途就需要特殊硬件,而不是随便说需求这样……需求不合理上帝也没办法啊。
最低端的单片机程序都要按微秒来考虑,不知道你的毫秒精度在工业上能起什么作用。。。
[解决办法]
搜索 RTX 实时驱动

读书人网 >C#

热点推荐