[問題] MFC AfxBeginThread

看板C_and_CPP作者時間15年前 (2009/06/11 08:53), 編輯推噓2(2011)
留言13則, 4人參與, 最新討論串1/1
我把本版的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)

06/11 09:13, , 1F
FromHandle 傳回暫時性的 CWnd 不是 MyFrame 故沒有 value
06/11 09:13, 1F

06/11 09:31, , 2F
傳 this 不好, MFC 有維護一份 HandleMap 來聯繫 Handle 及
06/11 09:31, 2F

06/11 09:31, , 3F
MFC 物件, 這是 per module & thread 的, 有些函式會去檢查
06/11 09:31, 3F

06/11 09:32, , 4F
在某個執行序有的 MFC 物件, 再另一個執行去不一定存在
06/11 09:32, 4F

06/11 09:45, , 5F
那?? 該怎麼解決呢? 把東西移去CDocument? PostMessage?
06/11 09:45, 5F

06/11 09:45, , 6F
>"< 不過那2招我都不想用啊~~
06/11 09:45, 6F

06/11 09:48, , 7F
因為我不是採 DOC/VIEW的結構啊..
06/11 09:48, 7F

06/11 12:20, , 8F
難不成你想在thread裡面接收WM處理訊息?
06/11 12:20, 8F

06/11 13:38, , 9F
沒有 我沒要處理任何視窗事件
06/11 13:38, 9F

06/11 21:36, , 10F
註冊一個WM訊息, 傳hwnd給thread, 在thread裡面postmessage
06/11 21:36, 10F

06/11 21:37, , 11F
回去, 請那個window自己做
06/11 21:37, 11F

06/16 09:42, , 12F
如果value,parent和child thread會共用的話…
06/16 09:42, 12F

06/16 09:43, , 13F
不是要多一個volatile的宣告~~
06/16 09:43, 13F
文章代碼(AID): #1AC5MbAK (C_and_CPP)