繁体   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