多线程导致传感器数据失真?

JackDoge 2010-07-11 08:17:17
悲剧啊。。。

使用一个单独读串口的程序来接收一个电子罗盘数据,精度有0.2°
但是在另一个程序里新开一个线程来读串口数据,放到一个全局变量里,然后主线程调用这个数据,精度就变成5°了。。。。

求教各位,会是什么原因呢?该如何解决
...全文
166 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackDoge 2010-07-13
  • 打赏
  • 举报
回复
哎,好像跟线程没什么关系。。。 貌似是传感器自身的问题= =
Eleven 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 neromustdie 的回复:]
没。。。

该如何保证任意时刻只有一个线程访问单一数据呢?谢谢
[/Quote]
EnterCriticalSection,LeaveCriticalSection就可以了,比起使用内核对象来效率要高。。。
JackDoge 2010-07-12
  • 打赏
  • 举报
回复
清早一顶~
JackDoge 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oyljerry 的回复:]
引用 6 楼 neromustdie 的回复:

晕。。
还真是这样

我要是在主线程里写个while(1),其它什么都不干,读出的传感器数据精度就比较高

但是如果主线程里做了图形渲染,读出的传感器误差就特别大。。。。

到底是为什么啊。。。。

图像处理,占用了CPU,来不及处理你的数据
[/Quote]
但是并没有丢失数据啊。。。
每次串口来的数据都被采集到了的。。。
oyljerry 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 neromustdie 的回复:]

晕。。
还真是这样

我要是在主线程里写个while(1),其它什么都不干,读出的传感器数据精度就比较高

但是如果主线程里做了图形渲染,读出的传感器误差就特别大。。。。

到底是为什么啊。。。。
[/Quote]
图像处理,占用了CPU,来不及处理你的数据
JackDoge 2010-07-11
  • 打赏
  • 举报
回复
晕。。
还真是这样

我要是在主线程里写个while(1),其它什么都不干,读出的传感器数据精度就比较高

但是如果主线程里做了图形渲染,读出的传感器误差就特别大。。。。

到底是为什么啊。。。。
JackDoge 2010-07-11
  • 打赏
  • 举报
回复
不过我不让主线程访问接收到的数据也不行哦。。。

只让接收数据的线程把数据打印出来,其它线程都不访问,误差还是蛮大。。。
oyljerry 2010-07-11
  • 打赏
  • 举报
回复
线程互斥,mutex等互斥,让每次只有一个线程可以访问数据
JackDoge 2010-07-11
  • 打赏
  • 举报
回复
没。。。

该如何保证任意时刻只有一个线程访问单一数据呢?谢谢
m_tornado 2010-07-11
  • 打赏
  • 举报
回复
互斥问题考虑了吗?任一时刻只有一个线程可访问单一数据内容
不然后果很难预料~
JackDoge 2010-07-11
  • 打赏
  • 举报
回复
我又试了一下,把主线程的处理屏蔽掉,只负责输出传感器数据,之前要做图像渲染~
然后精度变成了1°左右。。。。

15,471

社区成员

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

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