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

感谢。

有帮助吗?

解决方案

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

  1. 即使您使用回调,SetTimer也会使用消息(由于处理消息而调用回调函数)。因此,如果您不运行消息泵,则SetTimer不可行。

  2. 回调由操作系统调用,操作系统不知道C ++“this”。来自地面洞的指针,因此你的回调必须是全局C风格的函数或静态成员。

  3. timeSetEvent是“多媒体”的一部分。计时器系列,不需要消息泵。关于上述回调函数签名的观察仍然适用。如果您正在编写控制台应用程序,则缺少对消息泵的要求非常重要。

  4. 您也可以考虑使用线程和CreateWaitableTimer,但我不经常使用等待计时器,因此无法对它们发表评论。

  5. 如果您需要在后台工作,那么线程可以是解决问题的更优雅方式。当您进行线程处理时,您不必将工作分成块(如果您从计时器中踢出工作,则会执行此操作)。但是当然你的线程无法触及GUI,因此当你开始线程化时,生活可能会让变得复杂。我的网站上有一个工作线程介绍这里

其他提示

类比?

在这里查看回调函数的简要说明:
什么是“回调&# 8221;在C中它们是如何实现的?

使用带回调的计时器会说“每y秒调用一次函数x”,并且系统支持多任务处理,无论原始函数是什么,该函数都会在第二个执行线程中每隔y秒调用一次。正在做。

编辑:正如在另一个答案中所建议的那样,系统可能不会为您创建第二个线程,在这种情况下,您必须自己创建线程并设置该线程的回调。

编辑:在Windows中,您可以使用 SetTimer 功能。它会将WM_TIMER消息发布到您的窗口的消息队列中,您的消息循环可以自行处理该消息,或者将其移交给默认消息过程以调用您指定的回调函数。我不确定如果你没有窗户会发生什么,但试一试。

您的问题相当不清楚,但很可能他们建议您创建一个线程并在该线程中运行您的函数。

这可以通过继承系统特定的 Thread 类来完成;通过构造具有某种回调函数作为参数的相同类;通过创建一个在一段时间限制后调用回调函数的计时器...没有更具体的问题我不能给出更具体的建议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top