看板 C_and_CPP 關於我們 聯絡資訊
: 推 jhchou:fun1是某個class的member function嗎? 12/30 16:00 : → tyc5116:不是~ 12/30 17:03 : 推 jhchou:ThreadStart的引數要class的member function才行喔 12/30 17:12 : → jhchou:寫個class,讓一個成員函式去呼叫fun1 把這個函式當參數 12/30 17:16 : → jhchou:丟給ThreadStart試試看 12/30 17:17 : → tyc5116:不是很懂... 12/30 18:29 剛剛寫了一隻小程式試了一下, 先定義一個全域的函式 void fun() { cout<< 1 << endl; } 接著在main中 ThreadStart^ ts = gcnew ThreadStart(&fun); Thread^ t = gcnew Thread(ts); t->Start(); 可以compile通過並且順利執行 所以我推文說ThreadStart參數必須要是member function是錯的 接著學原po的做法 class ActTB { public: void *fptr; } 然後在main中 ActTB a; a.fptr = &fun; 然後把a,fptr丟去當ThreadStart的參數 情況就跟原Po一樣不管怎麼轉型都沒辦法通過編譯 所以最後只好為fun寫個wrap class ref class ActTB { private: void (*fptr)(); public: ActTB(void (*f)()) : fptr(f) {}; void Do() {fptr();}; } ActTB^ a = gcnew ActTB(&fun); ThreadStart^ ts = gcnew ThreadStart(a, &(ActTB::Do)); 這樣就可以通過編譯並且正常執行 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.148.185
ledia:msdn 上的範例好像就是後者這種方法 12/30 23:34
tyc5116:謝謝,我再試著了解看看,MSDN寫的兩種我一開始看不懂他 12/31 15:51
tyc5116:這種寫法的用意...原來是這樣子....@@ 12/31 15:51