【问题标题】:Any difference between kernel32.dll Sleep and Thread.Sleep()kernel32.dll Sleep 和 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/Invoke SleepThread.Sleep 会很好,是首选方法。
  • Ehh...你关心Sleep的性能吗?

标签: c# multithreading sleep wait kernel32


【解决方案1】:

其实差别很大。

This blog post 解释了为什么托管线程不应该在可能的情况下进行非托管阻塞。 official MSDN documentation 具有相同的指导方针,但没有所有基本细节。

附: Thread.Sleep is a sign of a poorly-designed program.

【讨论】:

  • 同意。为什么你会想要对托管线程进行非托管阻塞,当然,这超出了我的范围。
【解决方案2】:

我不这么认为。它们都只在当前线程上工作。

在主线程中使用 Sleep 函数时要小心,因为依赖于同步时序的程序通常会在外部配置更改时出现问题。

在支持或监听线程中使用睡眠通常不是问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2021-03-08
    • 1970-01-01
    • 2015-01-05
    • 2019-10-31
    相关资源
    最近更新 更多