停止在C#中执行程序

时间:2012-07-04 20:24:32

标签: c#

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

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

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

Thnx提前.. :))

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

  

Thread.sleep代码(CLOCKS_PER_SEC);

是与

等效的方法
  

无效等待(浮动秒)

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

答案 2 :(得分:2)

Thread.Sleep(CLOCKS_PER_SEC);

Thread.SpinWait(NUMBER_OF_CYCLES);

<强> - 编辑 -

道歉的人。当我正在为上述内容写下我的解释时,有一个停电...那将教会我发布半个答案,试图成为第一个。感谢评论者对事情进行了检查。 :)

无论如何...... Thread.Sleep将暂停当前线程一段时间,而Thread.SpinWait将导致线程进入紧密循环(来自MSDN)。

Thread.SleepThread.SpinWait进行比较的一种有趣方法是使用任务管理器等方式监控处理器活动。如果在运行以下

时查看任务管理器
Thread.SpinWait(int.MaxValue);

您会注意到,当该行代码运行时,该进程会最大化其中一个核心。但是,如果您运行以下行,

Thread.Sleep(int.MaxValue);

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