Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 睡眠特异性蜱虫_C#_Timer - Fatal编程技术网

C# 睡眠特异性蜱虫

C# 睡眠特异性蜱虫,c#,timer,C#,Timer,我需要一个函数来等待指定数量的DateTime.Ticks(大约155000)。不幸的是,它不能与以下函数一起工作(等待了大约300000个滴答声): private void sleep_ticks(长t) { long _start=DateTime.Now.Ticks+t; int i=0; 做 { i++; Console.WriteLine((DateTime.Now.Ticks-_start)+“=>”+i); 如果(DateTime.Now.Ticks>=\u开始) 打破 }虽然(

我需要一个函数来等待指定数量的DateTime.Ticks(大约155000)。不幸的是,它不能与以下函数一起工作(等待了大约300000个滴答声):

private void sleep_ticks(长t)
{
long _start=DateTime.Now.Ticks+t;
int i=0;
做
{
i++;
Console.WriteLine((DateTime.Now.Ticks-_start)+“=>”+i);
如果(DateTime.Now.Ticks>=\u开始)
打破
}虽然(正确);
Console.WriteLine((DateTime.Now.Ticks-_start)+“<”+t+--“+i);
Console.ReadLine();
}
我添加了一些调试输出:-) 最后一个值必须接近0

以下是睡眠节拍(1)的输出:

-1=>1-1 => 2; -1 => 3; -1 => 4; -1 => 5; -1 => 6; -1 => 7; -1 => 8; -1 => 9; -1 => 10; 
-1 => 11; -1 => 12; -1 => 13; -1 => 14; -1 => 15; -1 => 16; -1 => 17; -1 => 18; -1 => 19; 
-1 => 20; -1 => 21; -1 => 22; -1 => 23; -1 => 24; -1 => 25; -1 => 26; -1 => 27; -1 => 28; 
-1 => 29; 156262 < 1 -- 29;
有人知道为什么会这样,或者如何修复它吗

谢谢和问候 罗伯特

使用

使用


这是一个暂停系统的命令,您应该能够在代码中实现它,使它也能完成您需要的任务

System.Threading.Thread.Sleep(100);

如果我有100个,你可以将它设置为DateTime.Now.Ticks,它应该仍然可以工作。

这是暂停系统的命令,你应该能够将它实现到你的代码中,使它也能做你需要的事情

System.Threading.Thread.Sleep(100);

如果我有100,你可以将它设置为DateTime.Now.Ticks,它应该仍然有效。

私有无效TicksDrivenSleepingThread(长Ticks) { int-imilliesecondtimeout

        //  http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx
        //A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond. 
        //Convert Ticks to their Millseconds Equivalen
        imillisecondsTimeout = Convert.ToInt32((Ticks / 10000));

        while (true) 
        {

            //Wait
            Thread.Sleep(imillisecondsTimeout);
            //Do What Needs Doing
        }


    }

私有void TicksDrivenSleepingThread(长Ticks) { int-imilliesecondtimeout

        //  http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx
        //A single tick represents one hundred nanoseconds or one ten-millionth of a second. There are 10,000 ticks in a millisecond. 
        //Convert Ticks to their Millseconds Equivalen
        imillisecondsTimeout = Convert.ToInt32((Ticks / 10000));

        while (true) 
        {

            //Wait
            Thread.Sleep(imillisecondsTimeout);
            //Do What Needs Doing
        }


    }
“我需要一个函数,等待指定数量的DateTime.Ticks。”这是不可能的

使用System.Threading.Thread.Sleep(int毫秒)等待以毫秒为单位的精度

// Puts the current thread to sleep for 15 milliseconds.
System.Threading.Thread.Sleep(15);
关于已接受的答案(),应该注意Thread.Sleep(TimeSpan)忽略小数毫秒

// Puts the current thread to sleep for 15 milliseconds.
System.Threading.Thread.Sleep(15);
“此睡眠过载使用超时的总毫秒数。小数毫秒被丢弃。”如本文所述:

这意味着,在提供线程时,在等待的最短时间段内,半毫秒将被忽略。利用时间跨度睡眠155000个时钟。一个毫秒内有10000个时钟,因此155000个时钟=15.5毫秒。在等待15毫秒的情况下,这可能不会有太大影响。它可能会e在实际需要滴答声或某些度量比毫秒更精确的情况下会产生影响。这就是为什么在这种情况下,为了清晰起见,我建议使用整数(毫秒)重载

如果使用毫秒不适用,我建议考虑旋转线程。这意味着保持线程处于活动/忙碌状态,在调用之间反复检查适当的高分辨率计时器。即使这样,也很容易给出不准确的结果,因为操作系统可能会安排另一个优先级更高的线程,从而扭曲计时


请注意线程。睡眠是使线程脱离计划程序、不进行处理和睡眠的最短时间。线程可能最终“等待”恢复处理的时间比指定的时间长。这个答案提供了一点关于线程原因的清晰说明。睡眠并不总是精确地指定的时间

关于一毫秒等于10000个滴答的参考信息。我相信这是.NET中的标准,不能更改。 “我需要一个函数,等待指定数量的DateTime.Ticks。”这是不可能的

使用System.Threading.Thread.Sleep(int毫秒)等待以毫秒为单位的精度

// Puts the current thread to sleep for 15 milliseconds.
System.Threading.Thread.Sleep(15);
关于已接受的答案(),应该注意Thread.Sleep(TimeSpan)忽略小数毫秒

// Puts the current thread to sleep for 15 milliseconds.
System.Threading.Thread.Sleep(15);
“此睡眠过载使用超时的总毫秒数。小数毫秒被丢弃。”如本文所述:

这意味着,在提供线程时,在等待的最短时间段内,半毫秒将被忽略。利用时间跨度睡眠155000个时钟。一个毫秒内有10000个时钟,因此155000个时钟=15.5毫秒。在等待15毫秒的情况下,这可能不会有太大影响。它可能会e在实际需要滴答声或某些度量比毫秒更精确的情况下会产生影响。这就是为什么在这种情况下,为了清晰起见,我建议使用整数(毫秒)重载

如果使用毫秒不适用,我建议考虑旋转线程。这意味着保持线程处于活动/忙碌状态,在调用之间反复检查适当的高分辨率计时器。即使这样,也很容易给出不准确的结果,因为操作系统可能会安排另一个优先级更高的线程,从而扭曲计时


请注意线程。睡眠是使线程脱离计划程序、不进行处理和睡眠的最短时间。线程可能最终“等待”恢复处理的时间比指定的时间长。这个答案提供了一点关于线程原因的清晰说明。睡眠并不总是精确地指定的时间

关于一毫秒等于10000个滴答的参考信息。我相信这是.NET中的标准,不能更改。

Windows不是实时操作系统。可能发生的情况是,您的程序被操作系统中发生的其他事情中断。即使使用
Thread.Sleep
您唯一的保证是它至少会等待您请求的时间。看起来您已经重新发明了,尽管需要将滴答声转换为毫秒?您可能希望作为一个紧密的循环不断地检查
日期时间。现在
将消耗您的CPU.Console.WriteLine espe