有人建议我使用“回调函数”来实现计时器,以便在Server应用程序读取客户端输入时在后台运行。我尝试在线查看解释,但希望有人能给我一个简单的比喻。

谢谢。

最佳答案

有两种使用Windows中的回调来实现计时器的方法,即SetTimer和timeSetEvent。基础是:


即使您使用了回调,SetTimer也会使用消息(由于处理消息而调用了回调函数)。因此,如果不运行消息泵,SetTimer将不可行。
回调是由操作系统调用的,该操作系统不知道地面上有一个洞的C ++“ this”指针,因此您的回调必须是全局C样式函数或静态成员。
timeSetEvent是“多媒体”计时器系列的一部分,不需要消息泵。但是,上述关于回调函数签名的观察仍然适用。如果您正在编写控制台应用程序,那么缺少消息泵的需求可能很重要。
您可能还考虑了线程和CreateWaitableTimer,但是我不经常使用可等待的计时器,因此无法对其进行评论。


如果您需要在后台进行工作,则线程化是解决问题的一种更为优雅的方法。在线程化时,您不必将工作分成多个部分(如果您从计时器中踢出工作,则可以这样做)。但是,当然,您的线程无法接触GUI,因此开始线程化时,生活可能会变得有些复杂。我的网站here上有一个工作线程简介。

关于c++ - 回叫功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1802355/

10-13 04:26