[問題] static member function

看板C_and_CPP (C/C++)作者 (冰淇淋乾杯)時間16年前 (2009/06/11 23:15), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串1/1
想請問一個問題 在我的class中,我建立了一個static的function 那這個function是做Thread的用途,長得像下面這樣: DWORD __stdcall ThreadProc(void *Param); 那我另外還有一個Run的member function,如下: void Run(int FuncNum) 其中,我利用Run的參數去指定class中的其他member function 丟給class中的ThreadProc,另開一個Thread去處理 大概是如下的作法: void Run() { CreateThread(NULL, 0, ThreadProc, (void *)Param, 0, &ThreadID); } DWORD __stdcall Light::ThreadProc(void *Param) { LightParam *TmpOb = (LightParam *)(Param); Light *pthread = (Light *)(TmpOb->ThisObject); switch (TmpOb->FuncNum) { case 1: return pthread->OpenLight(); case 2: return pthread->CloseLight(); case 3: return pthread->GetLightState(); case 4: return pthread->GetLightLevel(); case 5: return pthread->SetLightLevel(TmpOb->Level); default : return -1; } } 那程式可以運作沒有錯 但是我在member function中有動過private的值 但是透過Thread執行後卻統統沒有改變 而直接使用「Object.Method」的方式卻可以 請問一下這是什麼原因?要如何修正? 以下附上敝人程式碼,還請各位先進給予指點 http://nopaste.info/e6d1fc9dbb.html -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.61.222

06/12 08:56, , 1F
不知道你是否注意到CreateThread並不會即時啟動
06/12 08:56, 1F

06/12 08:56, , 2F
所以不應該在呼叫之後馬上看值
06/12 08:56, 2F

06/12 08:56, , 3F
所以看到的值,可能是Thread還沒被啟動的值
06/12 08:56, 3F

06/12 08:57, , 4F
所以才會讓你有誤以為值沒有被更動
06/12 08:57, 4F
文章代碼(AID): #1ACH-ReL (C_and_CPP)
文章代碼(AID): #1ACH-ReL (C_and_CPP)