作者septemhill (冰淇淋乾杯)
看板C_and_CPP
標題[問題] static member function
時間Thu Jun 11 23:15:36 2009
想請問一個問題
在我的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
推 godman362:不知道你是否注意到CreateThread並不會即時啟動 06/12 08:56
→ godman362:所以不應該在呼叫之後馬上看值 06/12 08:56
→ godman362:所以看到的值,可能是Thread還沒被啟動的值 06/12 08:56
→ godman362:所以才會讓你有誤以為值沒有被更動 06/12 08:57