回调函数的提问

来源:12-10 案例:并发任务执行与函数回调

Amberzy

2021-03-03

这里讲到了回调函数,但是感觉案例中并没有讲为什么要在这里用回调函数,是为了效率更高吗?还是有别的考虑呢?

这里把回调函数的操作放到了DownloadFile 这个函数里来做,发现程序功能并没有受到影响。所以不太明白这里用回调函数的意义。


 //request->callback(request);
  mtx_lock(&request->context->mutex);
  request->context->download_left--;
  mtx_unlock(&request->context->mutex);
  PRINTLNF("\rDownload file from %s into %s successfully", request->url, request->filename);
  return 0;
写回答

1回答

bennyhuo

2021-03-03

可能同学没有相关背景哈。案例太小也不太好展开,实际上同学看完最后的GUI下载案例就很容易理解这一点了。

实际上下载作为io,我们一般会放到io线程中去处理,而进度展示则会有单独的线程来处理,这个线程也通常会处理用户交互,例如接受用户的输入等等。

回调是一套单独的逻辑,虽然代码在这里似乎可以放到下载的流程当中,但我们把回调拆解出来以后,就可以传不同的函数进去,为逻辑解耦提供了可能性。很多时候,类似于下载这样的能力是一个功能模块,而回调则是下载功能的使用者负责编写的。

2
0

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2219 学习 · 853 问题

查看课程