1

在 C++ 中,我曾经编写过一个函数,该函数通过传递给它的 float 参数的数量来停止程序的执行,函数如下:

void wait(float sec){
  clock_t endwait = clock() + sec * CLOCKS_PER_SEC; // CLOCK_PER_SEC == 1000
  while(clock() < endwait);
}

在 C# 中是否有类似的内置方法?如果没有,我怎么能用 C# 写一个这样的?

提前谢谢.. :)

4

3 回答 3

5

请用System.Threading.Thread.Sleep(int millisecondsTimeout);

于 2012-07-04T20:29:36.530 回答
3

线程.睡眠(CLOCKS_PER_SEC);

是等效的方法

无效等待(浮点秒)

但是,它并没有停止程序的执行。它只是暂停程序运行的线程。我认为这些方法之间存在一些差异。void wait(float sec)是一种忙碌的等待方法。处理器从活动进程队列中获取线程或进程,进行一些计算。但是在方法Thread.Sleep(CLOCKS_PER_SEC)线程进入挂起队列时,除非 CLOCKS_PER_SEC 时间结束,否则处理器不会让它运行。

于 2012-07-04T20:43:48.273 回答
2
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);

您会注意到该过程根本不使用任何处理周期。

于 2012-07-04T20:26:49.103 回答