kernel32.dll Sleep 和 Thread.Sleep() 之间的任何区别
Posted
技术标签:
【中文标题】kernel32.dll Sleep 和 Thread.Sleep() 之间的任何区别【英文标题】:Any difference between kernel32.dll Sleep and Thread.Sleep() 【发布时间】:2011-07-06 09:32:13 【问题描述】:以下之间是否有任何区别(性能,实现。.whatever):
我)
DllImport("kernel32.dll")]
public extern static void Sleep(uint msec);
..然后调用睡眠函数
ii)
Thread.Sleep()
【问题讨论】:
明显的区别在于,一个设计用于本机代码,另一个用于面向 .NET Framework 的托管代码。你能解释一下除了这个区别之外你想知道什么吗? 我们是否需要考虑使用替代形式,还是两者都会达到目的? 不,当您编写 C# 代码时,没有理由必须从 kernel32.dll 中 P/InvokeSleep
。 Thread.Sleep
会很好,是首选方法。
Ehh...你关心Sleep的性能吗?
【参考方案1】:
其实差别很大。
This blog post 解释了为什么托管线程不应该在可能的情况下进行非托管阻塞。 official MSDN documentation 具有相同的指导方针,但没有所有基本细节。
附: Thread.Sleep
is a sign of a poorly-designed program.
【讨论】:
同意。为什么你会想要对托管线程进行非托管阻塞,当然,这超出了我的范围。【参考方案2】:我不这么认为。它们都只在当前线程上工作。
在主线程中使用 Sleep 函数时要小心,因为依赖于同步时序的程序通常会在外部配置更改时出现问题。
在支持或监听线程中使用睡眠通常不是问题。
【讨论】:
以上是关于kernel32.dll Sleep 和 Thread.Sleep() 之间的任何区别的主要内容,如果未能解决你的问题,请参考以下文章
Win32 32 位进程加载 64 位 kernel32.dll