关于线程如何返回数据

onlyhuiyi 2013-07-23 04:00:40
大家好
自己刚工作,经验比较少,遇到个问题
我启动了一个线程一直在读加速度传感器的数据,我想把这数据运算后 置一个标识,比如加速度特别大,就撞车了 ,别人可以得到运算的结果 编码发送到服务器,

我如何将这个结果告诉别人的,使用全局变量?我总觉得使用全局变量是程序设计不好的结果,可是我却想不出好的办法,将这个结果传出去。而且全局访问的时候很容易冲突吧,程序就很容易崩溃。
我是做的wince下的服务程序,使用c++开发
先谢谢大家了~~
...全文
530 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
氰客 2013-07-24
  • 打赏
  • 举报
回复
注册回调吧,易于拓展,比如需要其他的数据。
qyxqyxqyx 2013-07-24
  • 打赏
  • 举报
回复
还有一种方法。在你同事的线程里头等待一个事件。在你的线程里头检测,如果加速度过大,就生成这个事件。 struct MyStruct{ Event event; int iYour; }; MyStruct m; void your_colleage_thread(PVOID pVoid) { bool flag = true; while(flag) { waitforsingleobject(); MyStruct * p = (MyStruct *)pVoid; p->iYour; } } void my_thread(PVOID pVoid) { if(is_faster(...)) { ((MyStruct *)pVoid)->iYour = 你要通知的值; Release(...); } }
onlyhuiyi 2013-07-24
  • 打赏
  • 举报
回复
感谢大家的热心帮助,结贴给分,分不多。。
onlyhuiyi 2013-07-24
  • 打赏
  • 举报
回复
引用 19 楼 max_min_ 的回复:
[quote=引用 4 楼 onlyhuiyi 的回复:] [quote=引用 2 楼 ananluowei 的回复:] 我用线程是自己封装在一个基类中,使用的时候派生一下。 这样,无论传递进来还是传递出去,用类的成员变量就容易多了。
前辈 比如我有一个 线程 用来读传感器 数据的类, 另一个同事开发的是编码的类, 让同事继承我的这个类 我咋感觉挺别扭呢。。[/quote] 你同事要用到你的接口获取参数,为什么不在他的类中定义的一个你的类的成员变脸,然后构造后直接调用你的接口来获取 [/quote] 谢谢 你的帮助 这是一个方法,但是这个类的对象在 另一个文件已经开启线程,如果在同事的类中也实例化一个对象,那就相当于两个不同的对象了。 我最后还是想用全局变量吧。
max_min_ 2013-07-24
  • 打赏
  • 举报
回复
引用 4 楼 onlyhuiyi 的回复:
[quote=引用 2 楼 ananluowei 的回复:] 我用线程是自己封装在一个基类中,使用的时候派生一下。 这样,无论传递进来还是传递出去,用类的成员变量就容易多了。
前辈 比如我有一个 线程 用来读传感器 数据的类, 另一个同事开发的是编码的类, 让同事继承我的这个类 我咋感觉挺别扭呢。。[/quote] 你同事要用到你的接口获取参数,为什么不在他的类中定义的一个你的类的成员变脸,然后构造后直接调用你的接口来获取
onlyhuiyi 2013-07-24
  • 打赏
  • 举报
回复
引用 14 楼 FrankHB1989 的回复:
[quote=引用 8 楼 qq506657335 的回复:] 就只知道boost库里面可以用packaged_task 和promise
C++11有std::future/std::promise。 [/quote] 额c++11没用过啊,vs05不支持吧。。
onlyhuiyi 2013-07-24
  • 打赏
  • 举报
回复
引用 13 楼 lpcads 的回复:
不知wince中有没有sendmessage函数
Wince 是有的 因为是嵌入式的应用 实时性比较高,领导一直不赞成消息这种。。
superchair 2013-07-24
  • 打赏
  • 举报
回复
我比较习惯使用一个static的类用来在整个项目内传递数据,这样既保证了数据的可靠,也不会出现全局变量重名的问题
u011497315 2013-07-24
  • 打赏
  • 举报
回复
对不起!这个不懂!
u011497315 2013-07-24
  • 打赏
  • 举报
回复
很好!值得学习!
u011497315 2013-07-24
  • 打赏
  • 举报
回复
感觉还不错啊~!
majun298 2013-07-23
  • 打赏
  • 举报
回复
比较简单的方法,发消息吧
大尾巴猫 2013-07-23
  • 打赏
  • 举报
回复
传递1个字节啊,用namespace吧,用起来方便,也不容易冲突
FrankHB1989 2013-07-23
  • 打赏
  • 举报
回复
引用 8 楼 qq506657335 的回复:
就只知道boost库里面可以用packaged_task 和promise
C++11有std::future/std::promise。
lpcads 2013-07-23
  • 打赏
  • 举报
回复
不知wince中有没有sendmessage函数
onlyhuiyi 2013-07-23
  • 打赏
  • 举报
回复
引用 10 楼 qyxqyxqyx 的回复:
在线程里面设置一个回调函数,当线程完成时,你判断有木有回调函数,如果有,就调用回调函数。保证异步和通知
这个方法也想过,但是我不至于就为了通知一个字节的标志,做一个回调吧。。 但是这种方法确实好,感谢 你的回答~~
  • 打赏
  • 举报
回复
顶楼上
qyxqyxqyx 2013-07-23
  • 打赏
  • 举报
回复
在线程里面设置一个回调函数,当线程完成时,你判断有木有回调函数,如果有,就调用回调函数。保证异步和通知
onlyhuiyi 2013-07-23
  • 打赏
  • 举报
回复
引用 8 楼 qq506657335 的回复:
就只知道boost库里面可以用packaged_task 和promise
木有用过啊。。现在c++初学的用的还不好。。
SenXXX 2013-07-23
  • 打赏
  • 举报
回复
就只知道boost库里面可以用packaged_task 和promise
加载更多回复(7)

64,681

社区成员

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

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