使用AfxGetMainWnd函式的乙個心得

2021-08-31 08:08:20 字數 1198 閱讀 4848

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

使用afxgetmainwnd函式獲取mfc程式中的主框架類指標是乙個常用作法。但是你會發現這一做法有時也會失靈。不信,你測試一下下面的**:

[cpp]view plain

copy

print?

unsigned __stdcall secondthreadfunc( void* parguments )  

}  return 0;  

}  void cmainframe::ontest1()  

unsigned __stdcall secondthreadfunc( void* parguments ) } return 0;}    void cmainframe::ontest1() 

執行ontest1函式,你會發現客戶區並沒有列印"來自執行緒的字串"。下面我們把執行緒函式變一下:

[cpp]view plain

copy

print?

unsigned __stdcall secondthreadfunc( void* parguments )  

}  return 0;  

}  

執行ontest1函式,我們發現檢視客戶區出現了"來自執行緒的字串"。接下來我們除錯進去afxgetmainwnd函式,發現afxgetmainwnd函式如下:

[cpp]view plain

copy

print?

_afxwin_inline cwnd* afxapi afxgetmainwnd()  

_afxwin_inline cwnd* afxapi afxgetmainwnd()  

由於afxgetthread()函式返回為null,所以afxgetmainwnd函式返回為null。為什麼會這樣呢?下面我提出我的猜想(本人暫時驗證不了,僅起拋磚引玉的作用)。我估計是mfc在多執行緒中大量運用了tls(執行緒本地儲存)來儲存某些狀態,主框架視窗指標屬於主線程的tls(執行緒本地儲存)儲存的狀態,但是應用程式類指標不屬於tls儲存的狀態,它可以在該程序的任何執行緒獲取。

給我老師的人工智慧教程打call!

使用AfxGetMainWnd函式的乙個心得

使用afxgetmainwnd函式獲取mfc程式中的主框架類指標是乙個常用作法。但是你會發現這一做法有時也會失靈。不信,你測試一下下面的 執行ontest1函式,你會發現客戶區並沒有列印 來自執行緒的字串 下面我們把執行緒函式變一下 執行ontest1函式,我們發現檢視客戶區出現了 來自執行緒的字串...

使用AfxGetMainWnd函式的乙個心得

使用afxgetmainwnd函式獲取mfc程式中的主框架類指標是乙個常用作法。但是你會發現這一做法有時也會失靈。不信,你測試一下下面的 unsigned stdcall secondthreadfunc void parguments return 0 void cmainframe ontest...

AfxGetMainWnd返回NULL也是可能的

afxgetmainwnd返回null也是有可能的。因為 afxwin inline cwnd afxapi afxgetmainwnd 而cwnd cwinthread getmainwnd cwnd cwinthread getmainwnd 而m pmainwnd有時候的值如果還沒有被設定,a...