回调的使用

本文探讨了回调函数在多线程环境中的应用场景,特别是在工作线程上传文件时,如何利用回调实时更新UI线程的进度条。回调作为函数指针,允许工作线程通知UI线程进行特定操作,实现异步通信。回调函数通常需要声明为全局静态以确保其在不同线程间的有效访问。
摘要由CSDN通过智能技术生成

应用场景

函数调用分直接调用和回调,那什么情况下会想要用回调呢?
工作线程中正在上传一个文件,而UI 线程想要将上传的进度实时显示到进度条中。这个时候我们希望工作线程每更新一次progressValue,UI线程便可以获取到progressValue并更新到进度条中。回调便可以实现这样的功能。(通过工作线程发消息给UI 线程也可以实现同样的功能)

回调的使用

回调其实就是函数指针,那么这句话到底是什么意思呢?
我们真正想要调用的其实就是void UI::func(float pro)这个函数,所以我们在workThread 类中声明了一个函数指针m_func,并且将指针指向void UI::func(float pro),这样当我们执行m_func(0.5)时,UI 线程便会在自己空闲的时候去执行它的void UI::func(float pro)函数。(回调是异步的,所以UI 线程不一定会立马去执行这个函数)
回调函数需要声明为全局静态(why?)

class UI:
static void UI::func(float pro)
{
   
	updateProgressbar(pro);
}
class workThread:
typedef void (__stdcall *pFunc)(float);
pFunc m_func = &UI::func;
m_func(0.5);

实际用例

//MainForrm.h
#ifndef MAINFORM_H
#define MAINFORM_H
#include "WorkThread.h"
class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值