为什么我会使用无限超时的Sleep()?

时间:2009-12-11 08:02:47

标签: windows winapi sleep

根据MSDN,Sleep()可以提供INFINITE值,并且“表示暂停不应该超时”。

为什么我要在程序中使用INFINITE超时调用Sleep()?

6 个答案:

答案 0 :(得分:4)

我使用过睡眠(INFINITE),它非常有意义。我用它来保持线程活着。我已注册WMI通知事件(ExecNotificationQueryAsync,无限接收事件通知),然后您需要保持应用程序活着。不知道这对你有意义。

答案 1 :(得分:3)

没有超时的睡眠不需要计时器。这减少了预期可变长度等待的开销,但绝对确定线程将被恢复。

答案 2 :(得分:3)

据我所知,睡眠,因为他们介绍了SleepEx,它只是SleepEx的一个薄的,方便的包装器,当他们把它重写为包装器时,他们决定只是将timeout参数传递给SleepEx,而不是处理它无论如何。显然,以这种方式,INFINITE作为超时的函数的行为也传播到Sleep(因此必须记录),但是,如果没有SleepEx的bAlertable参数,它完全没用(睡眠(超时)等于SleepEx(超时,FALSE),所以你将有一个无限的不可退休的等待。)

在Windows CE上,他们可能已经决定改变这种行为,因为它实际上是愚蠢的,所以我认为CE上的Sleep(INFINITE)会自动转换为SuspendThread;然而,在Windows上,出于兼容性原因,他们可能被迫保持“简单”行为。

答案 3 :(得分:2)

除了所说的内容(基本上等待中断发生)你很可能有一个无限的超时而不是疯了。例如,我是一个需要一次做3件事的应用程序(工人)。

我选择让每个工作在新线程中运行并在Main()线程中有无限超时(因为程序不应该退出,除非抛出异常,在这种情况下整个应用程序重新启动),为了方便和可读性(我可以在不影响全局行为的情况下评论3件作品中的任何一件,或者如果需要可以轻松地将它们分成不同的工人)。

与2个新线程+第3个工作的主线程相比,这可能会增加非常小的开销,但考虑到今天的计算机性能和内存,它可以忽略不计。

答案 4 :(得分:1)

没有理由在他的理智心灵中睡觉(无限)。它没有实际意义。

对于WaitForSingleObject(...,timeout)和SleepEx(timeout)的一般性和对称性,INFINITE确实有意义。

提醒一下,SleepEx会尝试从线程的APC队列中消耗掉东西。

答案 5 :(得分:0)

好吧,当我们需要等到^ C但我们不想要的时候(1);

相关问题