回调函数的疑惑

jiazhucai jiazhucai 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题背景:之前的一个项目有用到一款网络摄像机,其中需要调用摄像机SDK获取视频帧的BMP格式的数据,比如回调函数中会把帧数据写到一个全局的内存块。通过设置回调函数来获取帧数据。我发现只要在程序初始化中设置该回调函数,在后面的业务模块中只要是一个循环,我就能从内存块中提取出实时的帧数据,大致流程如下:

// 存放帧数据的数组
char data[1000];

// 回调函数,callback_fun由SDK提供
void callback_fun()
{
...
// 将帧数据写到一个全局数组data中
}

// 初始化工作,在程序一开始时执行
void init()
{
.......
// 设置回调函数,set_callback也是由SDK提供
int flag = set_callback(para1, para2, ..., callback_fun);
......
}

// 主要业务代码
void dowork()
{
while(true)
{
// 从数组data中取当前帧数据
}
}

问题:我在业务代码的循环语句中并没有明确地使用到调用函数,只是在初始化时调用过一次设置回调函数,为什么我从data中获得的是实时的帧数据?是不是set_callback隐藏地开了一个线程,在循环调用,实时地向data数组中写数据?如果是这样还有一个问题,一个线程往data中写数据,而我的业务代码中要读数据,这是一个读者写者问题,可我并没有加锁互斥,但在长时间运行的过程中程序并没有崩溃过和错误结果的现象,这又是为什么?
分不多,还是希望各位大神能回答。
...全文

相关推荐

Doubt

Doubt

明天哇哈哈

jquery.blockUI.js上传滚动等待效果实现思路及代码

请求的url: 代码如下: function request(url, onSuccess, paras, method, isAsync, isMask) { $.ajax({type:method,url:url,async:isAsync,data:paras,success:function(request){onSuccess(request,isMask);},error:function(e) {if(isMask) $(‘#div_mask’).unblock();},beforeSend:function(e){if(isMask)$(‘#div_mask’).block(

weixin_38557896

疑惑的近义词.docx

疑惑的近义词.docx

qq_58157133

mfc下实现回调函数

程序实现了在mfc下如何定义一个回调函数,如何使用回调函数,以及如何把类指针传递递给用户回调函数的例程。

lilanp

C语言 回调函数详解

我们在使用C语言实现相对复杂的软件开发时,经常会碰到使用回调函数的问题。但是回调函数的理解和使用却不是一件简单的事,在本篇我们根据我们个人的理解和应用经验对回调函数做简要的分析。 1、什么是回调函数   既然谈到了回调函数,首先我们就要搞清楚什么是回调函数。在讨论回调函数之前,我们需要说明另一个概念,那就是函数指针。什么是函数指针呢?说的浅显一点,函数指针就是指向函数的指针,说白了也是一种指针,只是它指向的不是整型,字符型等数据量,而是指向函数。在C中,每个函数在编译后都是存储在内存中,并且每个函数都有一个入口地址,根据这个地址,我们便可以访问并使用这个函数。函数指针就是指向这个入口地址,从而

weixin_38661128
评论 7
收藏 已收藏
分享
返回顶部
jiazhucai
模式及实现 5,529 成员 4,167 内容