1. 程式人生 > >MFC執行緒函式中訪問成員變數的方法

MFC執行緒函式中訪問成員變數的方法

用AfxBeginThread啟動執行緒,執行緒的執行函式有兩種定義的方法:

全域性函式:UINT threadMessageBoxAdapter( LPVOID lParam );

靜態成員函式:static UINT threadMessageBoxAdapter( LPVOID lParam );


若執行緒函式式全域性函式,線上程中使用變數都必須是全域性變數,不能使用對話方塊類成員變數,成員變數定義成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”的資訊,說明成功訪問成員變數。