2010-06-02 77 views
2

我有一個線程在完成時將值設置爲true。在那之前我等待:適用於調試但不發佈

while(1) 
{ 
    if(done[0] == true) 
    { 

     break; 
    } 
} 

此代碼工作得很好的調試,但釋放它停留在永遠循環下去,即使調試明確說,它是真實的,不是虛假的。

爲什麼這不起作用?

由於

回答

14

這是對症不標記donevolatile的。

沒有volatile優化編譯器可以將值緩存在寄存器中。

例如

private volatile int i; 
+0

是的,伎倆!謝謝 – jmasterx 2010-06-02 03:38:31

6

在附註中,不是(恕我直言)這樣做的好實踐。 您可能(巧妙地)簡化了您的問題,但創建一個像這樣的等待某個任務完成的繁忙循環是一個糟糕的,容易出錯的方法。 你應該使用一些鎖定/事件機制(或者至少在循環中加入睡眠)。

1

這通常是一個糟糕的設計理念。

由於您使用VS我猜你是針對Windows,所以我建議你看看你的標準WaitForSingleObjects or WaitForMultipleObjects

或者如果你只是更新屏幕上的東西,也許看看WM_KICKIDLE

+0

同意。編譯器通過在這裏失敗給你一個很大的幫助! – NickZoic 2010-06-02 05:37:23

相關問題