void StartDUTThread(int iDut)
{
//CString strTemp;
//AfxMessageBox(_T("1"));
int index = threadReq[iDut-1].index;
g_iThreadResult[iDut-1] &= threadReq[iDut-1].currentFunc(iDut,index);
g_bThreadEnabled[iDut-1] = false; //通知主執行緒已執行完任務
if (!g_iThreadResult[iDut-1]||bIsStop[iDut-1])
{
EndDutThread(iDut,index);
}
}
如上面這段函式,我總共有4個執行緒,每個執行緒會去同時呼叫這個函式,debug模式下:這個函式可以正常運行完成;release模式下:這個函式會進行不下去,比如我把 ”AfxMessageBox(_T("1")); ”的注釋取消掉,不會彈框,說明函式可能沒進來。但我把 “CString strTemp; ”前的注釋拿掉,這個函式就能正常運行完成了。我試過把“CString strTemp; ”改為其他型別,比如int, BOOL等,函式都不能執行。目前就發現加一句CString型別的變數宣告就可以執行下去了。好奇怪呀!有大佬能解答嗎?
uj5u.com熱心網友回復:
你描述的現象應該是觸發了某種未定義行為,多執行緒的話估計是全域變數的問題吧,可以先減少執行緒數量,然后打斷點看一下uj5u.com熱心網友回復:
表面看來是堆疊被改寫了。CString strTemp; 未使用的情況下,在release堆疊上留有空間,不會被優化掉。
int t[n]; 未使用的情況下,在release堆疊上不留空間,會被優化掉。
堆疊改寫的情況下,那么很可能iDut引數被改寫了,檢測下吧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273818.html
標籤:C++ 語言
上一篇:這段正則運算式為什么沒匹配到?
下一篇:求求幫忙看看C語言的題
