看板 C_and_CPP 關於我們 聯絡資訊
我把本版的thread相關文章全看完了 但似乎沒有人遇到這種問題 假設我有一個class 我寫一些虛擬碼來代表 struct ThreadInfo{ HWND hwnd; } class MyFrame : public CFrameWnd{ int value; ThreadInfo info; void createThread(){ info.hwnd = this->m_hWnd; AfxBeginThread(run,&info); } } static void run(LPVOID param){ ThreadInfo* info = (ThreadInfo*)param; MyFrame* frame = (MyFrame*)CWnd::FromHandle(info->hwnd); frame->value; <-----值會錯誤.. } 是不是 我在AfxBeginThread沒辨法使用傳hwnd,要傳this來當參數比較好 但??? 這不是 mfc 建議禁用的嗎?? 雖然傳this 的確可以解決我的問題,而且沒有錯誤, 但總覺得不踏實 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.114.105 ※ 編輯: neigence 來自: 210.69.114.105 (06/11 08:57)
firose:FromHandle 傳回暫時性的 CWnd 不是 MyFrame 故沒有 value 06/11 09:13
firose:傳 this 不好, MFC 有維護一份 HandleMap 來聯繫 Handle 及 06/11 09:31
firose:MFC 物件, 這是 per module & thread 的, 有些函式會去檢查 06/11 09:31
firose:在某個執行序有的 MFC 物件, 再另一個執行去不一定存在 06/11 09:32
neigence:那?? 該怎麼解決呢? 把東西移去CDocument? PostMessage? 06/11 09:45
neigence:>"< 不過那2招我都不想用啊~~ 06/11 09:45
neigence:因為我不是採 DOC/VIEW的結構啊.. 06/11 09:48
jaw109:難不成你想在thread裡面接收WM處理訊息? 06/11 12:20
neigence:沒有 我沒要處理任何視窗事件 06/11 13:38
jaw109:註冊一個WM訊息, 傳hwnd給thread, 在thread裡面postmessage 06/11 21:36
jaw109:回去, 請那個window自己做 06/11 21:37
aecho:如果value,parent和child thread會共用的話… 06/16 09:42
aecho:不是要多一個volatile的宣告~~ 06/16 09:43