c++回调函数杂谈

今天有一个小白问我:回调函数都是同步运行,好像没有什么意义呀?

额,一下就被问懵了。你是不是也有这样的感觉呢?

我说:1、回调函数可以放在线程中,那么程序就可以同时在做两件事情了。

2、回调函数至少是切换了代码的命名空间,放在不同的cpp中,可以可以引用的对象可以不同。

3、回调函数是改变写代码的思维方式。主线程将任务分配出去,等待完成后通知我即可。

在一个人静下来思考思考后,写下这篇杂文。

 

回调函数的定义

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

 

回调函数的作用

1、对于调用方,可以降低耦合(也就是可以减少需要关心的东西),仅在特定情况发生时处理。例如登陆模块,如果系统已经保存了账号密码内部就会自动登陆,仅失败时,才通知主线程显示登陆界面等待用户输入账号密码。

2、对于函数的设计者,可以设计一个通用的函数。例如列表,排序时通过回调函数得到排序顺序,就可以支持任意列的排序。

3、对于库的设计者,可以设计一个通用的功能,将部分功能留给调用方实现。例如海康威视的视频控件,将视频流通过回调函数返回到调用方,从而无需实现视频流绘制到窗口。

 

其他实现方式

1、模板类

在基类中实现模板功能。子类实现对应的接口函数。

2、接口类

定义接口类,函数根据接口类指针调用对应的函数。调用方通过继承接口实现相关功能。

3、windows事件

4、windows消息

posted @ 2019-11-27 20:52  山石散人  阅读(291)  评论(0编辑  收藏  举报