我試圖創建一個名爲ClientManager類工作線程,但我不能得到新的CWinThread訪問AfxGetMainWnd(),即:如何從CWinThread訪問AfxGetMainWnd()?
UINT ClientManager::WorkerThreadProc(LPVOID param){
ClientManager *pThis = reinterpret_cast<ClientManager*>(param);
return pThis -> DoThreadJob();
}
UINT ClientManager::DoThreadJob(){
createClientSession("1");
return 0;
}
void ClientManager::createThread(){
m_clientManagerThread = AfxBeginThread(WorkerThreadProc,this,0,0,0,NULL);
}
void ClientManager::createClientSession(CString clientID){
if (AfxGetMainWnd()->GetSafeHwnd()== NULL){
_cprintf("NULL");
}
}
輸出:NULL
AfxGetMainWnd () - > GetSafeHwnd()在主線程中工作。
謝謝!
這似乎爲我們工作。使用此解決方案有什麼隱患?爲什麼這不是被接受的答案? –
OP在2011年問了這個問題。現在是2016年。它的工作原理很簡單,因爲m_pMainWnd是在InitInstance()中設置的,並且通常一直存在,直到應用程序窗口被銷燬。 –
我正在使用您的解決方案,但我想知道您的解決方案是否有任何看不見的問題 –