回调函数的提问
来源: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回答
-
可能同学没有相关背景哈。案例太小也不太好展开,实际上同学看完最后的GUI下载案例就很容易理解这一点了。
实际上下载作为io,我们一般会放到io线程中去处理,而进度展示则会有单独的线程来处理,这个线程也通常会处理用户交互,例如接受用户的输入等等。
回调是一套单独的逻辑,虽然代码在这里似乎可以放到下载的流程当中,但我们把回调拆解出来以后,就可以传不同的函数进去,为逻辑解耦提供了可能性。很多时候,类似于下载这样的能力是一个功能模块,而回调则是下载功能的使用者负责编写的。
20
相似问题