首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回调函数

回调函数
EN

Stack Overflow用户
提问于 2009-11-26 16:46:30
回答 3查看 943关注 0票数 0

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-26 19:36:38

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

  1. SetTimer使用消息,即使您使用回调(回调函数是作为处理消息的结果调用的)。因此,如果你不运行一个消息pump.
  2. Callbacks是由操作系统调用的,那么SetTimer是不可行的,因为它不知道从地面上的一个洞中的这个“C++”指针,所以你的回调要么必须是一个全局的C风格的函数,要么是一个静态member.
  3. timeSetEvent是“多媒体”计时器系列的一部分,不需要消息泵。不过,上面关于回调函数签名的观察结果仍然适用。不过,如果你正在编写一个控制台应用程序,那么不需要消息泵是很重要的。
  4. 你也可以考虑线程化和CreateWaitableTimer,但我不经常使用可等待的计时器,所以无法对它们发表评论。

如果你需要在后台工作,那么线程可以是一种更优雅的方式来解决这个问题。在线程化时,您不必将工作划分为多个块(如果您从计时器中启动工作,则可以这样做)。但是当然你的线程不能接触到GUI,所以当你开始线程的时候,生活可能会变得有点复杂。在我的网站here上有一个关于worker线程的介绍。

票数 2
EN

Stack Overflow用户

发布于 2009-11-26 17:02:23

类比?

下面是回调函数的简要说明:

What is a “callback” in C and how are they implemented?

使用带有回调的计时器就是说“每隔y秒调用函数x”,在支持多任务的系统中,该函数将在第二个执行线程中每y秒被调用一次,而不管原始函数可能在做什么。

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-11-26 17:01:38

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

这可以通过对特定于系统的Thread类进行子类化来实现;通过使用某种回调函数作为参数来构造相同的类;通过创建一个计时器来在一定的时间限制后调用回调函数……如果没有更具体的问题,我就不能给出更具体的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1802355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档