C++ 既然我可以使用默认的TimerQueue,为什么还要使用自己的TimerQueue?

C++ 既然我可以使用默认的TimerQueue,为什么还要使用自己的TimerQueue?,c++,winapi,C++,Winapi,通过调用CreateTimerQueue并使用它来创建自己的TimerQueue有什么好处,而不仅仅是使用TimerQueue的CreateTimerQueueTimer值来调用NULL从而使用默认值?我知道如果我使用自己的计时器,我可以通过删除队列一次删除所有计时器。我很难想象这是唯一的优势,我错过了什么 首先感谢HerrJoebob和Raymond Chen的高质量评论。我本来不打算回答我自己的问题 原因1:其他人正在删除默认队列中的所有计时器(感谢Herrjoeb) 原因2:有人把一个“b

通过调用
CreateTimerQueue
并使用它来创建自己的
TimerQueue
有什么好处,而不仅仅是使用
TimerQueue
CreateTimerQueueTimer
值来调用
NULL
从而使用默认值?我知道如果我使用自己的计时器,我可以通过删除队列一次删除所有计时器。我很难想象这是唯一的优势,我错过了什么

首先感谢HerrJoebob和Raymond Chen的高质量评论。我本来不打算回答我自己的问题

原因1:其他人正在删除默认队列中的所有计时器(感谢Herrjoeb)

原因2:有人把一个“bajillion”(俚语,很多)计时器放在默认队列中,让你的计时器挨饿(多亏了Raymond Chen)


原因3:在执行回调时,使用标志
WT_EXECUTEINTIMERTHREAD
可以保存上下文切换,但是如果回调需要一段时间,则会延迟其他计时器。使用自己的计时器队列意味着您有自己的计时器线程,这样就没有人可以延迟您的计时器,您也不会无意中延迟其他人的计时器。

我唯一能想到的是,它允许您在程序模块之间划分计时器,因为没有其他模块删除默认队列中的所有计时器并导致崩溃的风险把你的拿走。我很好奇是否还有其他人能想出更好的理由。@HerrJoebob我也是,这就是我问这个问题的原因;)我们对这类事情实施RAII管理,因此“保护自己不受他人影响”方面对我们来说不是问题。出于同样的原因,您可以选择一个私有堆而不是默认进程堆:它允许您将所有计时器放在一个私有队列中,而不会受到其他计时器的干扰。例如,另一个组件可能会使用大量计时器淹没默认计时器队列,从而耗尽您的计时器。这通常不是人们担心的事情。