簡體   English   中英

適用於調試,但不適用於發布

[英]Works on debug but not release

我有一個線程在完成后將值設置為true。 在那之前我等待:

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

        break;
    }
}

這段代碼在Debug中運行得很好但在Release中它永遠保持在循環中,即使調試器清楚地說它是真的而不是假的。

為什么這不起作用?

謝謝

這是沒有症狀的標記donevolatile

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

例如

private volatile int i;

另一方面,這不是(恕我直言)這樣做的好習慣。 你可能(聰明地)簡化你的問題,但是創建一個繁忙的循環來等待一些任務完成是一個糟糕的,容易出錯的方法。 你應該使用一些鎖定/事件機制(或者至少為循環添加睡眠)。

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

由於您使用的是VS,我猜您的目標是Windows,因此我建議您根據您的標准查看WaitForSingleObjects或WaitForMultipleObjects

或者,如果您只是在屏幕上更新內容,請查看WM_KICKIDLE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM