我有一個線程在完成時將值設置爲true。在那之前我等待:適用於調試但不發佈
while(1)
{
if(done[0] == true)
{
break;
}
}
此代碼工作得很好的調試,但釋放它停留在永遠循環下去,即使調試明確說,它是真實的,不是虛假的。
爲什麼這不起作用?
由於
我有一個線程在完成時將值設置爲true。在那之前我等待:適用於調試但不發佈
while(1)
{
if(done[0] == true)
{
break;
}
}
此代碼工作得很好的調試,但釋放它停留在永遠循環下去,即使調試明確說,它是真實的,不是虛假的。
爲什麼這不起作用?
由於
這是對症不標記done
爲volatile
的。
沒有volatile
優化編譯器可以將值緩存在寄存器中。
例如
private volatile int i;
在附註中,不是(恕我直言)這樣做的好實踐。 您可能(巧妙地)簡化了您的問題,但創建一個像這樣的等待某個任務完成的繁忙循環是一個糟糕的,容易出錯的方法。 你應該使用一些鎖定/事件機制(或者至少在循環中加入睡眠)。
這通常是一個糟糕的設計理念。
由於您使用VS我猜你是針對Windows,所以我建議你看看你的標準WaitForSingleObjects or WaitForMultipleObjects。
或者如果你只是更新屏幕上的東西,也許看看WM_KICKIDLE。
同意。編譯器通過在這裏失敗給你一個很大的幫助! – NickZoic 2010-06-02 05:37:23
是的,伎倆!謝謝 – jmasterx 2010-06-02 03:38:31