回调函数的原理与C++实现

相关链接:

https://www.zhihu.com/question/19801131/answer/27459821

里面有很多通俗易懂的原理,这里不过多解释,以其中一个商店买东西的情景实现。

main函数

/*
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,
过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。
在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,
店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,
你到店里去取货叫做响应回调事件。
作者:常溪玲
链接:https://www.zhihu.com/question/19801131/answer/13005983
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/

#include "CallBack.h"

void MyCallBack(int nNum)//该函数为你的电话号码
{
    //响应回调事件,接到电话去店里拿货
	CString str;
	str.Format(_T("%d:"), nNum);
	OutputDebugString(str);
	OutputDebugString(_T("正在去商店拿你需要的货!!!!!\r"));
}

vodi main()
{
    CallBack m_Caller;//该对象为店员
    //注册(登记)回调函数,将你的电话告诉店员,同时你告诉店员到货5秒后再通知你
    m_Caller.RegCallBack(MyCallBack,5);
}

头文件CallBack.h

#pragma once

typedef void(*MyCallBack)(int n);

class CallBack
{
public:
	CallBack();
	~CallBack();
	int m_nTemp;
	static UINT	WorkThread(LPVOID pThis);
	void RegCallBack(MyCallBack fun,int nNum);
	MyCallBack m_func;
};

CallBack.cpp

#include "stdafx.h"
#include "CallBack.h"

CallBack::CallBack()
{
}

CallBack::~CallBack()
{
}

void CallBack::RegCallBack(MyCallBack fun,int nNum)
{
	m_nTemp = nNum;
	m_func = fun;
	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread, this, 0, NULL);
}

UINT CallBack::WorkThread(LPVOID pThis)
{
	CallBack* pCaller = (CallBack*)pThis;//tc:未成功获取到正确的指针
	while (true)
	{
		static int nCount = 0;
		nCount++;
		Sleep(1000);
		if (10 == nCount)//触发了回调关联的事件,这里模拟10秒后到货
		{
            //留电话时可同时留下其他信息,如:你告诉店员到货后m_nTemp秒后再通知你
            Sleep(pCaller->m_nTemp * 1000);
			pCaller->m_func(nCount+pCaller->m_nTemp);//店员给你打电话叫做调用回调函数,
			break;
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值