推 wuliou:前陣子也有碰到這問題 後來發現是我critical section 12/17 10:37
→ wuliou:沒有處理好 有一些區段在執行比較慢的debug下不會出錯 12/17 10:38
推 cashlalala:multithread 測到會錯的話其他版本沒有錯都只是剛好而 12/17 11:25
→ cashlalala:以,跟debug或release沒關係 12/17 11:26
推 fuha:你可以檢查 WaitForSingleObject return value 12/17 12:58
感謝大大們的建議
我後來檢查 WaitForSingleObject的return value有些會是0xFFFFFFFF
用GetLastError()看錯誤代碼有6跟87,查MSDN說
6 : The handle is invalid.
87 : The parameter is incorrect.
代表的是說我的thread handler不正確 or thread沒有正確產生?
附上檢查錯誤號碼的版本code:
http://0rz.tw/a2zqR
奇怪的是,Debug模式下編譯出來的程式不會有上述錯誤產生
這些錯誤只在release模式下編譯出來的程式才會發生
※ 編輯: BombCat 來自: 1.174.235.40 (12/17 18:26)
→ descent:你能找出 Debug 和 release 有哪些地方不同嗎 12/17 18:29
推 kwpn:在可疑的地方加sleep, 看release是不是就變得較不會當 12/17 18:39
我覺得有可能是這段說的原因 http://ideone.com/hLSyn1
原文: http://msdn.microsoft.com/zh-tw/library/kdzttdcb%28v=vs.90%29.aspx
如同wuliou大說的debug版本跑比較慢,所以避掉這個
看起來應該不是race condition,而是WINAPI的使用問題
※ 編輯: BombCat 來自: 1.174.235.40 (12/17 19:14)
推 MetalChao:以前的經驗, release 跟 debug 其中一種差別在於, 沒給 12/17 22:34
→ MetalChao:初始值的global或static變數, debug會被清成0, release 12/17 22:35
→ MetalChao:則不會; 你可以看看你的程式有沒有假設某變數預設為0卻 12/17 22:36
→ MetalChao:沒給初始值的 12/17 22:36
→ azureblaze:global和static一定會被清成0 12/18 00:16
→ azureblaze:會有差的是local和class member 12/18 00:16