[英]Works on debug but not release
我有一個線程在完成后將值設置為true。 在那之前我等待:
while(1)
{
if(done[0] == true)
{
break;
}
}
這段代碼在Debug中運行得很好但在Release中它永遠保持在循環中,即使調試器清楚地說它是真的而不是假的。
為什么這不起作用?
謝謝
這是沒有症狀的標記done
的volatile
。
如果沒有volatile
,優化編譯器可以將值緩存在寄存器中。
例如
private volatile int i;
另一方面,這不是(恕我直言)這樣做的好習慣。 你可能(聰明地)簡化你的問題,但是創建一個繁忙的循環來等待一些任務完成是一個糟糕的,容易出錯的方法。 你應該使用一些鎖定/事件機制(或者至少為循環添加睡眠)。
這通常是一個糟糕的設計理念。
由於您使用的是VS,我猜您的目標是Windows,因此我建議您根據您的標准查看WaitForSingleObjects或WaitForMultipleObjects 。
或者,如果您只是在屏幕上更新內容,請查看WM_KICKIDLE 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.