在 C++ 中,我曾经编写过一个函数,该函数通过传递给它的 float 参数的数量来停止程序的执行,函数如下:
void wait(float sec){
clock_t endwait = clock() + sec * CLOCKS_PER_SEC; // CLOCK_PER_SEC == 1000
while(clock() < endwait);
}
在 C# 中是否有类似的内置方法?如果没有,我怎么能用 C# 写一个这样的?
提前谢谢.. :)
在 C++ 中,我曾经编写过一个函数,该函数通过传递给它的 float 参数的数量来停止程序的执行,函数如下:
void wait(float sec){
clock_t endwait = clock() + sec * CLOCKS_PER_SEC; // CLOCK_PER_SEC == 1000
while(clock() < endwait);
}
在 C# 中是否有类似的内置方法?如果没有,我怎么能用 C# 写一个这样的?
提前谢谢.. :)
请用System.Threading.Thread.Sleep(int millisecondsTimeout);
线程.睡眠(CLOCKS_PER_SEC);
是等效的方法
无效等待(浮点秒)
但是,它并没有停止程序的执行。它只是暂停程序运行的线程。我认为这些方法之间存在一些差异。void wait(float sec)
是一种忙碌的等待方法。处理器从活动进程队列中获取线程或进程,进行一些计算。但是在方法Thread.Sleep(CLOCKS_PER_SEC)
线程进入挂起队列时,除非 CLOCKS_PER_SEC 时间结束,否则处理器不会让它运行。
Thread.Sleep(CLOCKS_PER_SEC);
或者
Thread.SpinWait(NUMBER_OF_CYCLES);
- 编辑 -
我向各位道歉。在我为上述内容写解释时停电了......这将教会我发布半个答案以尝试成为第一个。感谢评论者保持检查。:)。
无论如何...Thread.Sleep
将暂停当前线程一段时间,同时Thread.SpinWait
会导致线程进入紧密循环(来自MSDN)。
一个有趣的比较方法是Thread.Sleep
使用Thread.SpinWait
任务管理器之类的东西来监视处理器活动。如果您在运行以下命令时查看任务管理器
Thread.SpinWait(int.MaxValue);
您会注意到,当该行代码正在运行时,该进程会最大限度地使用其中一个内核。但是,如果您运行以下行,
Thread.Sleep(int.MaxValue);
您会注意到该过程根本不使用任何处理周期。