Thread.Sleep(1)的目的?

Yah*_*nia 3 c# multithreading

我正在阅读一些线程基础知识,在msdn网站上我发现了这段代码.

    // Put the main thread to sleep for 1 millisecond to
    // allow the worker thread to do some work:
    Thread.Sleep(1);
Run Code Online (Sandbox Code Playgroud)

这是该页面的链接:http://msdn.microsoft.com/en-us/library/7a2f3ay4(v = vs.80).aspx.

为什么主线程睡眠时间为1毫秒?如果主线程持续运行,辅助线程是否会启动其任务?或者是一个需要1毫秒的任务的例子?如果任务一般需要5秒才能完成主线程应该睡眠5000毫秒?

如果这只是关于CPU使用情况,这里有一个关于Thread.Sleep的类似问题.

任何意见将不胜感激.

谢谢.

And*_*ber 7

1代码中的代码并不特别; 因为事情并不那么精确,它总是会睡得比较长,并且当你将它取回时,放弃你的时间片并不等于操作系统的任何保证.

时间参数的目的Thread.Sleep()是,您的线程将至少产生这段时间.

所以代码只是明确地放弃了它的时间段.一般来说,不需要这样的代码,因为操作系统会为您管理您的线程,抢先中断它们以便在其他线程上工作.

这种代码通常用在"线程示例"中,其中作者想要强制一些人为的事件来证明一些竞争条件等(在你的例子中似乎是这种情况)


正如Jon Hanna对同一问题的回答所指出的那样,Sleep(0)Sleep(1)(或任何其他非零数字)之间存在微妙但重要的区别,正如ChrisF所暗示的那样,这在某些线程情况下可能很重要.

这两个都涉及线程优先级; 线程可以被赋予更高/更低的优先级,这样只要有更高优先级的线程有任何工作要做,优先级较低的线程就永远不会执行.在这种情况下,Sleep(1)可以要求... 但是 ......

低优先级线程也受其他进程在同一系统上执行的操作的影响; 因此,虽然您的进程可能没有运行更高优先级的线程,但如果其他任何线程运行,您的进程仍然无法运行.

但是,这通常不是您需要担心的事情; 默认优先级是"正常"优先级,在大多数情况下,您不应更改它.提高或降低它有很多含义.