关于回调函数,被频繁回调的函数再上一次没执行完就进行下一次回调会怎样?

TS灵I 2018-04-08 05:54:56
实际上分为两个问题。
情景是这样的,我调用第三方库的某个函数a()之前需要设置一个回调函数,简称它为b()吧,在调用a()之后这个函数b()会被频繁回调。
问题一:那这个b()在第二次回调的时候是会立即执行,还是会等第一次回调的所有逻辑执行完再执行呢?
问题二:目前得到的比较可能的答案是会立即执行(也有可能是只是我这种情况是立即执行,还有其它情况是延迟执行的)。若是这样的话,如果函数b()再上一次没执行完就被调用了第二次,那上次未执行的逻辑就被打断不会再被执行了对么?
...全文
2800 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TS灵I 2018-05-16
  • 打赏
  • 举报
回复
谢谢大家的耐心解答。这个问题应该是我描述的不准确,还是没有太懂。不过还是谢谢大家了。结贴给分不代表正确性,请勿参考分数。再次谢谢大家!
xiaohuh421 2018-04-09
  • 打赏
  • 举报
回复
断点下来看堆栈就知道了是同步还是异步调用的了撒. 在b()函数中下断点, 看它的上N层是不是a函数, 如果是a函数, 说明b函数的执行, 是同步的, 不是异步的. 否则就是异步的. 同步的实现,内部类似这样: void a() { while(1) { b(); } }
zhangyiant 2018-04-08
  • 打赏
  • 举报
回复
要看你的a()是怎么调用b的。多线程还是单线程。
ooolinux 2018-04-08
  • 打赏
  • 举报
回复
引用 3 楼 u010165006 的回复:
你可以用写日志文件或者printf的方式来查看是否重入执行,如果重入执行,可以用变量判断一下直接return。
比如函数进入、函数返回的时候分别打印一下。
ooolinux 2018-04-08
  • 打赏
  • 举报
回复
你可以用写日志文件或者printf的方式来查看是否重入执行,如果重入执行,可以用变量判断一下直接return。
paschen 2018-04-08
  • 打赏
  • 举报
回复
如果是多线程,两次执行是由不同线程去做,第二次不会打断第一次,两次完全独立,只是有可能有重叠运行的时间
paschen 2018-04-08
  • 打赏
  • 举报
回复
用同一个线程去调用b,会等前一次执行完再执行第2次 如果是不同线程调用,两个调用是独立的,第二次会直接执行b中代码,不管第一次是否执行完 如果是多线程,通常需要采取必要的手段同步数据

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧