c++ 在线程实时监控某个全局变量是否改变 但不能影响线程的运行

浪子終回頭 2017-01-07 01:25:24
我用的是mfc 需要在一个线程A 内实时监控某个 全局变量 这个变量是在另外的线程B改变的 但是不能影响到这个线程A的正常运行 需要怎么做

具体的是 初始化 全局变量 = 0;

线程A 正常运行 并且监控 全局变量 是否被改变 被改变 做出反应

线程B 在某些情况下 改变 全局变量 的值

我试过了 通过发送线程 msg 来监控 但是不能实时的 断下 我想要的是实时监控 监控必须在 线程A内完成 因为我要改变线程A的运行流程

大大们来帮忙啊 分不多了 谢谢啦
...全文
1197 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪子終回頭 2017-01-17
  • 打赏
  • 举报
回复
使用暂停恢复线程 已解决
赵4老师 2017-01-09
  • 打赏
  • 举报
回复
《Windows核心编程》
lunat 2017-01-09
  • 打赏
  • 举报
回复
把线程A的业务切成消息队列,每个消息都只需要很短的时间完成。对于复杂且耗时的操作,等待语句换成GetMessage/TranslateMessage/DispatchMessage。 线程B向A的消息队列发送消息。A会在消息循环中检测到该消息。 这是兼顾你的“正常工作”和“实时”监控的最好的办法了。
浪子終回頭 2017-01-07
  • 打赏
  • 举报
回复
引用 7 楼 ilovepdh的回复:
当然,A肯定不能一直执行都在忙,这样定时器消息就进不来
而且我要打断A线程继续运行~不然会出现一系列错误~可不可以从线程的暂停和恢复突破~因为我用B线程改变变量值的时候会暂停A线程~改完后恢复线程A
浪子終回頭 2017-01-07
  • 打赏
  • 举报
回复
引用 7 楼 ilovepdh的回复:
当然,A肯定不能一直执行都在忙,这样定时器消息就进不来
我简单看了下~感觉和线程间发送msg差不多~但是我的程序基本是死循环~
浪子終回頭 2017-01-07
  • 打赏
  • 举报
回复
引用 6 楼 ilovepdh的回复:
线程A开一个定时器,在定时器里检测。
好的~一会我去看看~没弄过定时器呢
ilovepdh 2017-01-07
  • 打赏
  • 举报
回复
当然,A肯定不能一直执行都在忙,这样定时器消息就进不来
ilovepdh 2017-01-07
  • 打赏
  • 举报
回复
线程A开一个定时器,在定时器里检测。
浪子終回頭 2017-01-07
  • 打赏
  • 举报
回复
引用 4 楼 pengxiang_707的回复:
实时性这个问题,对于你的B线程来说本来就有它自身的逻辑存在,只有执行到检查消息的时候才会检查到消息已经被改变了
我想要的是在A线程延迟1秒检测一次~但是不能影响A线程的正常运行 就好像A线程开始运行~每一秒~检测一次~未改变~继续运行A~直到某时检测到变量改变~然后goto到某处
小竹浮生 2017-01-07
  • 打赏
  • 举报
回复
实时性这个问题,对于你的B线程来说本来就有它自身的逻辑存在,只有执行到检查消息的时候才会检查到消息已经被改变了
浪子終回頭 2017-01-07
  • 打赏
  • 举报
回复
引用 1 楼 幻夢之葉的回复:
你直接在线程A中判断这个值是否改变了不就可以了?
不能再线程检测啊~加在线程里面要加上百次检测~确实是想要用goto来跳转的
浪子終回頭 2017-01-07
  • 打赏
  • 举报
回复
引用 11 楼 pengxiang_707的回复:
[quote=引用 10 楼 u010223309 的回复:] [quote=引用 7 楼 ilovepdh的回复:]当然,A肯定不能一直执行都在忙,这样定时器消息就进不来
而且我要打断A线程继续运行~不然会出现一系列错误~可不可以从线程的暂停和恢复突破~因为我用B线程改变变量值的时候会暂停A线程~改完后恢复线程A[/quote] 最好不要这样做,线程调度没有你想象的那么快,会影响性能,如果只是解决外部消息传递也可以尝试用socket[/quote] 性能我倒是不在乎~反应速度按秒算都没事~实在不行我就多加点检测
幻夢之葉 2017-01-07
  • 打赏
  • 举报
回复
再来你也不可能实时改变你线程A的运行流程吧 假设你A还在运行某些程序,那你除了用goto 貌似没办法立马结束未完成的运算
幻夢之葉 2017-01-07
  • 打赏
  • 举报
回复
你直接在线程A中判断这个值是否改变了不就可以了?
小竹浮生 2017-01-07
  • 打赏
  • 举报
回复
引用 10 楼 u010223309 的回复:
[quote=引用 7 楼 ilovepdh的回复:]当然,A肯定不能一直执行都在忙,这样定时器消息就进不来
而且我要打断A线程继续运行~不然会出现一系列错误~可不可以从线程的暂停和恢复突破~因为我用B线程改变变量值的时候会暂停A线程~改完后恢复线程A[/quote] 最好不要这样做,线程调度没有你想象的那么快,会影响性能,如果只是解决外部消息传递也可以尝试用socket

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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