请各位帮我看看这个问题怎么做?

zhangpen 2008-06-12 11:58:44
两个线程,在一个线程中改变全局变量的值,另一个线程则一直判断这个全局变量的值是否有改变,这个判断全局变量是否有改变的线程怎么实现呀,请高手帮忙解决!!!能否给代码?
...全文
60 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoteng1984 2008-07-20
  • 打赏
  • 举报
回复
1.轮询法:
while(true)
{
if (globalVar == desiredValue)
{// Do something...
}
}
缺点:占CPU太多,单核下会CPU100%

2.轮询+Sleep法:
while(true)
{
if (globalVar == desiredValue)
{// Do something...
}
Sleep(cycle); // cycle为1000时表示睡眠1秒。
}
缺点:响应不够及时,可能造成cycle毫秒的延迟。

3. 线程同步法:
子线程:
globalVar = GetValue();
SetEvent(hEvent);
主线程:
WaitForSingleObject(hEvent, INFINITE);
printf("Value is %d\n", globalVar); // 使用globalVar.
优点:不使用轮询,主线程等待期间不占用CPU,是“标准”的做法。
wltg2001 2008-06-13
  • 打赏
  • 举报
回复
我觉得如果仅仅是为了同步而检测全局变量的值的话,倒不如用内核对象和WaitForSingleObject
wooyz 2008-06-13
  • 打赏
  • 举报
回复
就是同步锁的原理。可以考虑使用同步锁来实现。

例如线程1加锁,线程2用WaitSingleObject等着,一旦锁别释放,则往下执行!

不过,这么作会使得两线程耦合度太高,可能很容易不小心就搞死锁了:)

用007的方法发消息,比较省事明了。
liyinlei 2008-06-12
  • 打赏
  • 举报
回复
可以利用定时器循环检测全局变量。

比较好的应该是 改变全局变量的那个线程发消息通知另一个线程。PostThreadMessage
alfwolf 2008-06-12
  • 打赏
  • 举报
回复
这个判断全局变量是否有改变的线程怎么实现呀

这个线程可以循环检测你的那个全局变量,在工作循环中加上就可以了。
yjgx007 2008-06-12
  • 打赏
  • 举报
回复
改变后,给另一个线程发消息不就行了(用消息或另一个标志判断).
renxianfu 2008-06-12
  • 打赏
  • 举报
回复
仅仅就这个问题来说,在判断线程必须备份一份全局变量,每次循环把备份的和全局的作比较,不相等就有改变,这种效率很低
还是按照楼上几位同志说的搞吧
renxianfu 2008-06-12
  • 打赏
  • 举报
回复
仅仅就这个问题来说,在判断线程必须备份一份全局变量,每次循环把备份的和全局的作比较,不相等就有改变,这种效率很低
还是按照楼上几位同志说的搞吧

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧