C++ 回调函数

C++ 回调函数,c++,callback,C++,Callback,有人建议我使用回调函数实现一个计时器,在后台运行,同时我的服务器应用程序从客户端读取输入。我试着在网上寻找解释,但希望有人能给我一个更简单的类比 谢谢。您的问题相当不清楚,但他们可能建议您创建一个线程并在该线程中运行函数 这可以通过对特定于系统的线程类进行子类化来实现;通过构造具有某种回调函数作为参数的同一类;通过创建在某个时间限制后调用回调函数的计时器。。。如果没有更具体的问题,我无法给出更具体的建议。您的问题相当不清楚,但很可能他们建议您创建一个线程并在该线程中运行函数 这可以通过对特定于系

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


谢谢。

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


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

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

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

类比

在这里查看回调函数的简要说明:

使用带有回调的计时器会说“每y秒调用函数x”,而对于支持多任务处理的系统,在第二个执行线程中,该函数会每y秒调用一次,无论原始函数可能在执行什么

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

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

类比

在这里查看回调函数的简要说明:

使用带有回调的计时器会说“每y秒调用函数x”,而对于支持多任务处理的系统,在第二个执行线程中,该函数会每y秒调用一次,无论原始函数可能在执行什么

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


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

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

  • SetTimer使用消息,即使您使用回调(回调函数在处理消息时被调用)。因此,如果不运行消息泵,SetTimer是不可行的

  • < L> >回调是由操作系统调用的,它不知道来自地面的孔的C++“这个”指针,所以您的回调既必须是全局C样式函数,也必须是静态成员。< /P>
  • timeSetEvent是“多媒体”计时器系列的一部分,不需要消息泵。不过,上面关于回调函数签名的观察结果仍然适用。如果你正在编写一个控制台应用程序,那么对消息泵的需求的缺乏可能是很重要的

  • >P>你也可以考虑线程和创建WayTable定时器,但是我不经常使用可定制的定时器,所以不能对它们进行注释。


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

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

  • SetTimer使用消息,即使您使用回调(回调函数在处理消息时被调用)。因此,如果不运行消息泵,SetTimer是不可行的

  • < L> >回调是由操作系统调用的,它不知道来自地面的孔的C++“这个”指针,所以您的回调既必须是全局C样式函数,也必须是静态成员。< /P>
  • timeSetEvent是“多媒体”计时器系列的一部分,不需要消息泵。不过,上面关于回调函数签名的观察结果仍然适用。如果你正在编写一个控制台应用程序,那么对消息泵的需求的缺乏可能是很重要的

  • >P>你也可以考虑线程和创建WayTable定时器,但是我不经常使用可定制的定时器,所以不能对它们进行注释。


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

    操作系统?您计划使用Op Sys功能还是自己使用?操作系统是windows。他们给我看了一些win32的东西还有操作系统?您计划使用Op Sys功能还是自己使用?操作系统是windows。他们在给我看一些win32的东西