我有一种情况,我不想太快地执行特定的功能.我目前有这个代码:
DoSomething();
Thread.Sleep(TimeSpan.FromMilliseconds(200));
Run Code Online (Sandbox Code Playgroud)
如何更改此代码以在函数时间或等待时间的最大值运行?
请注意:我无法使用系统时间,因为我的软件可以更改时钟时间.
因此,如果DoSomething()需要400 MS,它只会等待400 MS,但如果需要100 MS,程序将等待200 MS.
也许是这样的:
var stopWatch = new StopWatch();
stopWatch.Start();
DoSomething();
stopWatch.Stop();
var diff = 200 - stopWatch.Elapsed.TotalMilliseconds;
if(diff > 0)
Thread.Sleep(diff);
Run Code Online (Sandbox Code Playgroud)
在秒表类不使用用于其测量系统时钟:
秒表通过计算基础计时器机制中的计时器滴答来测量经过的时间.如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量经过的时间.否则,Stopwatch类使用系统计时器来测量经过的时间.
更新:
你写:
因此,如果DoSomething()需要400 MS,它只能等待400 MS,但如果它需要100 MS,程序将等待200 MS.
我首先想到的是,这不是你想要的,因为在第二种情况下,总需要300 MS的时间.但如果确实如此,那么你需要这个代码:
var stopWatch = new StopWatch();
stopWatch.Start();
DoSomething();
stopWatch.Stop();
var timeToSleep = 200;
if(stopWatch.Elapsed.TotalMilliseconds < timeToSleep)
Thread.Sleep(timeToSleep);
Run Code Online (Sandbox Code Playgroud)
IF可以使用.Net的V4,创建两个任务并等待两个任务结束.
像这样的东西:
Task.WaitAll(
Task.Factory.StartNew(()=>DoSomething()),
Task.Factory.StartNew(()=>Thread.Sleep(200))
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7827 次 |
| 最近记录: |