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”的資訊,說明成功訪問成員變數。