c# – Thread.Sleep(1)的用途?
我正在阅读一些线程基础知识,在msdn网站上我发现了这段代码.
// Put the main thread to sleep for 1 millisecond to // allow the worker thread to do some work: Thread.Sleep(1); 这是该页面的链接:http://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.80).aspx. 为什么主线程睡眠时间为1毫秒?如果主线程持续运行,辅助线程是否会启动其任务?或者是一个需要1毫秒的任务的例子?如果任务一般需要5秒才能完成主线程应该睡眠5000毫秒? 如果这仅仅是关于CPU使用,这里是类似的Question about Thread.Sleep. 任何意见将不胜感激. 谢谢. 解决方法
该代码中的1不是特别的;因为事情并不那么精确,它总是会睡得比较长,并且当你将它取回时,放弃你的时间片并不等于操作系统的任何保证.
Thread.Sleep()中time参数的目的是,您的线程将至少在该时间内产生约. 所以代码只是明确地放弃了它的时间段.一般来说,不需要这样的代码,因为操作系统会为您管理您的线程,抢先中断它们以便在其他线程上工作. 这种代码通常用在“线程示例”中,其中作者想要强制一些人为的事件来证明一些竞争条件等(在你的例子中似乎是这种情况) 正如Jon Hanna对同一个问题的回答所指出的,Sleep(0)和Sleep(1)(或任何其他非零数字)之间存在微妙但重要的区别,正如ChrisF所暗示的那样,这在某些问题上很重要.线程情况. 这两个都涉及线程优先级;线程可以被赋予更高/更低的优先级,这样只要有更高优先级的线程有任何工作要做,优先级较低的线程就永远不会执行.在这种情况下,可能需要Sleep(1)……但是…… 低优先级线程也受其他进程在同一系统上执行的操作的影响;因此,虽然您的进程可能没有运行更高优先级的线程,但如果其他任何线程运行,您的进程仍然无法运行. 但是,这通常不是您需要担心的事情;默认优先级是“正常”优先级,在大多数情况下,您不应更改它.提高或降低它有很多含义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |