整理 用类的静态函数作为线程函数 和 用类的非静态函数作为线程函数

用类的静态函数作为线程函数

//使用类的静态函数作为线程函数,缺点无法当问类的保护和私有成员
//下面几行 是在类的成员函数里面调用的,开启了一个线程,Start_RedTest作为线程函数

	DWORD tid;
	HANDLE hHand = ::CreateThread(NULL,0,&Start_RedTest,(PVOID)this,0,&tid);
	if(hHand!=INVALID_HANDLE_VALUE) CloseHandle(hHand);
 
<img src="https://img-blog.csdn.net/20160217171143213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

 用类的非静态函数作为线程函数

    解决上面用法的限制
 
  union 先回顾一下它在此的作用:共用一个内存地址
  我们在类外:
         union { 
unsigned int (__stdcall *ThreadPorc)(void*);   //a
unsigned int (__stdcall dlg_mainframe::*MemberProc)();  //b
}StdcallProc;

 在给类添加一个和  unsigned int (__stdcall dlg_mainframe::*MemberProc)();  相似的函数
    
    声明   unsigned int __stdcall listenThreadFunction();
    实现:   
unsigned int __stdcall dlg_mainframe::listenThreadFunction()
{
this->任何成员函数();
return 0;
}

   创建线程:
           //用类的非静态函数作为线程函数来解决问题
//注意作为线程的非静态成员函数是没有参数的,因为非静态成员函数有一个默认的this参数
// 即,函数参数列表为空的非静态成员函数已经有了一个参数,那就在创建线程的时候将this作为参数值传入即可.
StdcallProc.MemberProc =&dlg_mainframe::listenThreadFunction;
CloseHandle((HANDLE)_beginthreadex(NULL, 0, StdcallProc.ThreadPorc, (void*)this, 0, NULL));
  








 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值