Developer Network
Developer Network
Developer
:CreateViewProfileText:
登录
MSDN 订阅
获取工具
下载
Visual Studio
SDK
试用软件
免费下载
Office 资源
计划
订阅
Administrators
学生
Microsoft Imagine
Microsoft 学生合作伙伴
ISV
新手
Events(事件)
社区
Magazine
论坛
博客
第 9 频道
文档
API 和参考
开发人员中心
示例
停用的内容
非常抱歉。你请求的内容已被删除。将在 1 秒内自动重定向。
提出问题
快速访问
论坛主页
浏览论坛用户
FAQ
搜索相关主题
Remove From My Forums
积极答复者
在子线程调用全局变量,引来的问题!!为什么明明是满足了条件啦!就是不执行!
Visual Studio Development
>
Visual C++
问题
0
登录进行投票
语言C++
//全局变量
bool IsNextData;
//在子线程调用如下
while(1)
{
if(IsNextData==true)
{
break;
}
}
为什么IsNextData在满足条件是,不执行break;我以跟踪IsNextData当时是true但是,就是不执行啊!!!!!
本人分不多,请不要贪图啊!!!!
杰文
2009年6月15日 10:59
回复
|
引用
答案
0
登录进行投票
按照蒋老师的方法是最安全的方法。
如果想用IsNextData判断
需要在声明的时候bool前面加
volatile
volatile bool IsNextData;
否则编译器会进行优化
IsNextData直接从寄存器中取值,而不访问内存。
而你在另一个线程中改变的事IsNextData内存中的值。
跟踪也是访问内存的值。
麻烦把正确答案设为解答。
已标记为答案
杰文
2009年6月16日 4:47
2009年6月16日 4:37
回复
|
引用
版主
全部回复
0
登录进行投票
InterlockedExchange
MSMVP VC++
2009年6月15日 16:51
回复
|
引用
版主
0
登录进行投票
按照蒋老师的方法是最安全的方法。
如果想用IsNextData判断
需要在声明的时候bool前面加
volatile
volatile bool IsNextData;
否则编译器会进行优化
IsNextData直接从寄存器中取值,而不访问内存。
而你在另一个线程中改变的事IsNextData内存中的值。
跟踪也是访问内存的值。
麻烦把正确答案设为解答。
已标记为答案
杰文
2009年6月16日 4:47
2009年6月16日 4:37
回复
|
引用
版主