回调函数概念摘抄

    技术2022-05-11  50

    回调函数,就是由你自己写的。你需要调用另外一个函数,而这个函数的其中一个参数,就   是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可   以在回调函数里完成你要做的事。     capVideoStreamCallback  这个回调函数,我没有做过,看了一下Help,应该是通过发送消息   WM_CAP_SET_CALLBACK_VIDEOSTREAM,来设置的,或者调用宏capSetCallbackOnVideoStream   来完成的。这样设定之后,系统在进行图像捕捉的过程中,就会自动调用你写的回调函数。     这个回调函数的函数体需要你自已来写,然后在另一函数中调用,即是说:   LRESULT  CALLBACK  capVideoStreamCallback(HWND  hWnd,LPVIDEOHDR  lpVHdr)   {    ........   }   //在另一函数中调用它(即以capVideoStreamCallback的地址作为一参数)   Function(1,......,capVideoStreamCallback,.....);   这就好像我们用定时器一样,在设置定时器时需要为定时器设置一回调函数:   ::SetTimer(m_hWnd,1,1000,(TIMERPROC)TMProc);这里的TMProc就是回调函数       模块A有一个函数foo,它向模块B传递foo的地址,然后在B里面发生某种事件(event)时,通过从A里面传递过来的foo的地址调用foo,通知A发生了什么事情,让A作出相应反应。          那么我们就把foo称为回调函数。            “这个回调函数不是VFW.h中声明的么,“          ----那是声明了回调函数原型,是告诉你传递进来的回调函数必须和它定义的原型保持一致。            ”为什么要自己写函数体呢?“          ----比如在上面模块B里面,它只知道当event发生时,向模块A发出通知,具体怎么回应这个事件,不是B所关心的,也不是B所能预料到的。          你站在A的角度上思考,当然要你自己作出对event的反应,也就是你要自己写函数体。            你如果明白了C++里面的函数指针,就很容易理解回调函数了。     "不知道系统调用后有什么结果,或者我怎么利用这个结果啊"   ---如果你向系统传递一个回调函数地址,那么你的程序就相当于上面我说的模块A,系统就相当于模块B,系统只是调用你的函数,它根本不可能知道会有什么结果。        你怎么利用这个结果,看你是怎么定义这个回调函数的。               回调函数和回调机制是不同的概念,。,,函数是被调用的,但是回调机制在不同的语言中不都是以函数指针来实现的。。。。比如c#...一般的在windows  api  中,会调都是使用函数指针实现的。。。  

    最新回复(0)