C++中线程函数中方访问成员变量

创建线程时,线程函数如果要设置成类的成员函数,则必须是静态成员函数,在此函数中不能使用非静态成员变量,如果要使用非静态成员变量的话,比如在MFC中,最好不要将MFC类的指针传递给线程函数,最好是传句柄给线程,创建线程用AfxBeginThread,把this作为第二个参数传递。 线程函数是回调函数,因此它必须是静态成员函数或者是类外部声明的全局函数。

全局线程函数:

UINT Thread(pParam)

{

  Your_Class *p=(Your_Class *)pParam;  
  //然后用p间接使用成员变量。 

}

线程函数为类的成员函数:

在线程中使用变量都必须是全局变量,成员变量定义成static,才能在线程函数中访问成员变量。

这里说明一种在线程函数中访问非静态成员变量的方法:

这里定义Thread类:

class Thread

{

public:

     static UINT threadMessageBoxAdapter( LPVOID lParam );

     UINT threadMessageBoxProc( );

private:

     CString strThreadText;

};

线程函数的实现:

UINT Thread::threadMessageBoxAdapter( LPVOID lParam )

{

     CTestVectorDlg* obj = ( CTestVectorDlg* )lParam;

     return obj->threadMessageBoxProc();

}

UINT Thread::threadMessageBoxProc()

{

      CString strThreadText;

      strThreadText.Format( _T( "%s" ), _T( "Thread adapter" ) );

      AfxMessageBox( strThreadText );

      return 0;

}

使用AfxBeginThread启动线程:

      CWinThread* thread;

      thread = AfxBeginThread( threadMessageBoxAdapter, this );

 这样,当线程启动后,弹出”Thread Adapter”的信息,说明成功访问成员变量。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值