作者neigence ()
站內C_and_CPP
標題[問題] MFC AfxBeginThread
時間Thu Jun 11 08:53:56 2009
我把本版的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)
1F:推 firose:FromHandle 傳回暫時性的 CWnd 不是 MyFrame 故沒有 value 06/11 09:13
2F:→ firose:傳 this 不好, MFC 有維護一份 HandleMap 來聯繫 Handle 及 06/11 09:31
3F:→ firose:MFC 物件, 這是 per module & thread 的, 有些函式會去檢查 06/11 09:31
4F:→ firose:在某個執行序有的 MFC 物件, 再另一個執行去不一定存在 06/11 09:32
5F:→ neigence:那?? 該怎麼解決呢? 把東西移去CDocument? PostMessage? 06/11 09:45
6F:→ neigence:>"< 不過那2招我都不想用啊~~ 06/11 09:45
7F:→ neigence:因為我不是採 DOC/VIEW的結構啊.. 06/11 09:48
8F:→ jaw109:難不成你想在thread裡面接收WM處理訊息? 06/11 12:20
9F:→ neigence:沒有 我沒要處理任何視窗事件 06/11 13:38
10F:→ jaw109:註冊一個WM訊息, 傳hwnd給thread, 在thread裡面postmessage 06/11 21:36
11F:→ jaw109:回去, 請那個window自己做 06/11 21:37
12F:推 aecho:如果value,parent和child thread會共用的話… 06/16 09:42
13F:→ aecho:不是要多一個volatile的宣告~~ 06/16 09:43