[問題] thread呼叫不能class?

看板C_and_CPP (C/C++)作者 (希望之歌)時間16年前 (2009/09/17 01:14), 編輯推噓1(1017)
留言18則, 3人參與, 最新討論串1/1
這個程式有個class是繼承自CDialog 大概像下面這樣 其中裡面有許多class 我不逐一寫出 class CVideoDlg : public CDialog { ... public: afx_msg void aaa(); public: static UINT MyThreadFun(LPVOID LParam); ... } 其中有宣告一個thread(AfxBeginThread) 及許多副程式 我想用在啟動thread時去呼叫副程式 正常的AfxBeginThread使用的寫法是 UINT CVideoDlg::MyThreadFun(LPVOID LParam) { MyThreadInfo *pInfo1=(MyThreadInfo*) LParam; ...(想要做的事)(程式就加在這) } 但因為我的程式需求 必需要在thread裡面呼叫class 因此我在thread裡面呼叫aaa()這個class UINT CVideoDlg::MyThreadFun(LPVOID LParam) { MyThreadInfo *pInfo1=(MyThreadInfo*) LParam; bbb(); CVideoDlg::aaa(); } 但在編譯時出現以下這個訊息 "error C2352: 'CVideoDlg::aaa' : 非靜態成員函式的呼叫不合法" 問題是 bbb() (bbb()是global副程式)可以編譯通過且正常呼叫 但aaa()卻不能通過編譯 想請問大家有解決方法嗎 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.184.218 ※ 編輯: hopesong 來自: 140.122.184.218 (09/17 01:18) ※ 編輯: hopesong 來自: 140.122.184.218 (09/17 01:19)

09/17 01:36, , 1F
你要呼叫的是誰的 aaa()?
09/17 01:36, 1F

09/17 01:39, , 2F
我要呼叫的是aaa() , bbb是用來舉例 一個行 另一個卻不行
09/17 01:39, 2F

09/17 01:40, , 3F
你的aaa到底是class還是member function
09/17 01:40, 3F

09/17 01:43, , 4F
MyThreadFun是static member,沒有this指標
09/17 01:43, 4F

09/17 01:43, , 5F
這樣程式應該不知道aaa是隸屬哪一個實體物件的
09/17 01:43, 5F

09/17 01:45, , 6F
可以請問一下 this指標要如何使用 加在哪嗎 謝謝
09/17 01:45, 6F

09/17 01:47, , 7F
如果aaa所隸屬的實體物件已經存在,可以將該物件的
09/17 01:47, 7F

09/17 01:47, , 8F
this指標作為MyThreadFun的參數LParam傳入
09/17 01:47, 8F

09/17 01:48, , 9F
到MyThreadFun()裡面把LParam轉型回 *CVideoDlg
09/17 01:48, 9F

09/17 01:49, , 10F
然後再透過該指標去呼叫aaa()
09/17 01:49, 10F

09/17 01:56, , 11F
看來我太嫩了 .... 看不太懂 還需要多加強基本功..
09/17 01:56, 11F

09/17 02:03, , 12F
如果你是在CVideoDlg的某member裡呼叫AfxBeginThread
09/17 02:03, 12F

09/17 02:05, , 13F
就是在第二個參數的位置填this
09/17 02:05, 13F

09/17 02:06, , 14F
然後MyThreadFun第一行寫 CVideoDlg* self=
09/17 02:06, 14F

09/17 02:06, , 15F
(CVideodlg*) LParam
09/17 02:06, 15F

09/17 02:07, , 16F
然後就可以 self->aaa();
09/17 02:07, 16F

09/17 02:07, , 17F
抱歉裡面打錯一些字XD 看是不是你需要的
09/17 02:07, 17F

09/17 02:22, , 18F
感謝f大 依照您的方法 真的成功了~ 感激不盡~
09/17 02:22, 18F
文章代碼(AID): #1AiHpZ3O (C_and_CPP)
文章代碼(AID): #1AiHpZ3O (C_and_CPP)