睡到c#
我希望每1秒周期性地运行一个函数,因此在10秒后它将执行10次。 最简单的方法是使用如下循环:睡到c#,c#,thread-sleep,C#,Thread Sleep,我希望每1秒周期性地运行一个函数,因此在10秒后它将执行10次。 最简单的方法是使用如下循环: while(true) { Thread.Sleep(1000); function(); } 但这种方法的主要问题是,它不会提供任何定期担保。 我的意思是,如果运行函数()需要0.1秒,函数的执行时间如下: 0,1.1,2.2,3.3,4.4 我记得,在实时语言ADA中,我们有一个函数sleep-until(#time)。现在我正在寻找C#的替代方案 任何示例代码都将收到通知。要在特定时间间隔后调
while(true)
{
Thread.Sleep(1000);
function();
}
但这种方法的主要问题是,它不会提供任何定期担保。
我的意思是,如果运行函数()需要0.1秒,函数的执行时间如下:
0,1.1,2.2,3.3,4.4
我记得,在实时语言ADA中,我们有一个函数sleep-until(#time)。现在我正在寻找C#的替代方案
任何示例代码都将收到通知。要在特定时间间隔后调用某些内容,应使用Timer类。 这是你的电话号码 有关更多信息,请参阅。您可以使用测量时间。我还将使用
For循环
var sw = new System.Diagnostics.Stopwatch();
var timeForOne = TimeSpan.FromSeconds(1);
var count = 10;
for(int i = 0; i < count; i++)
{
sw.Restart();
function();
sw.Stop();
int rest = (timeForOne - sw.Elapsed).Milliseconds;
if (rest > 0)
System.Threading.Thread.Sleep(rest);
}
var sw=new System.Diagnostics.Stopwatch();
var timeForOne=从秒开始的时间跨度(1);
var计数=10;
for(int i=0;i0)
系统。线程。线程。睡眠(rest);
}
在较小的inverals中休眠,并检查在执行代码之前是否已过了整整一秒钟。如果function()的执行时间超过1秒,您希望发生什么?c#不是实时语言。它甚至不能保证线程将在1秒后执行,因为可能还有其他线程/进程。如果你需要这么精确,也许你应该使用其他工具?我想这不会超过1秒。但如果多线程是可能的,我喜欢并行运行它们。我知道c#不是一种实时语言,但我很想知道我们是否能够以某种方式模拟实时行为。我会在2分钟后做这件事(你可以在2分钟后接受答案),非常感谢。这真的很有用:)太好了,但我仍然认为最后一个if块,rest和sleep函数调用的计算会消耗一些时间,并且看不出比前一个有什么优势!!这是另一种选择,但另一种看起来更简单:)@user1654052:实际上,时间跨度是无法量化的。减去+如果(rest>0)
消耗,它绝对可以忽略不计,并且不到1毫秒。不仅仅如此。仔细看一看。[sw.stop;int rest=blah;if(rest>0)]所有的执行都没有考虑它的时间和任务切换:)我知道它看起来可以忽略不计,但是如果它将运行一年,你不能保证每一秒钟执行一次函数。这就是为什么我不认为这是一个可以接受的方案answer@user1654052:您可以省略sw.Stop()因为以后只会使用一次(sw.appead
)。不管怎么说,这三条线所消耗的时间都远远少于一毫秒,因为它们是简单的算术运算。然而,您是对的,您需要补偿舍入问题等,如果它运行时间长,您需要高精度。
var sw = new System.Diagnostics.Stopwatch();
var timeForOne = TimeSpan.FromSeconds(1);
var count = 10;
for(int i = 0; i < count; i++)
{
sw.Restart();
function();
sw.Stop();
int rest = (timeForOne - sw.Elapsed).Milliseconds;
if (rest > 0)
System.Threading.Thread.Sleep(rest);
}