多线程编程,关于无线设备传输数据。。。求设计方案

半点竹节 发布于 2012/04/15 21:12
阅读 333
收藏 1

各位大侠:我这边需要实现一个功能简单介绍如下:

我想通过无线模块传输数据,主程序需要根据设备传来数据进行相应的操作,我想使用多线程编写,一边不同的监听设备是否有数据写入,我的主程序在做完相应的操作后,还会异步的去写设备文件,发送数据,小弟不知怎么实现,希望各位高手给个可行方法,具体代码我自己写。。。

加载中
0
中山野鬼
中山野鬼
你后面说的编程目标,和无线设备传输有什么关系?如果没有关系,你先把无线的去掉。重新规划下目标。如果你有关系你在列出来,我现在搞不清楚。
0
半点竹节
半点竹节
我是使用ARM和和STM32传输数据,STM32通过无线设备把数据传输到ARM我把数据处理后,再写一个值到STM32,需要使用无线设备传输给STM32,这个过程和读设备是异步的,基本就是这样子的了
0
半点竹节
半点竹节
补充回复,需要一个线程不停的监听无线设备,是否有新数据熟传输
0
中山野鬼
中山野鬼
你把无线的设备全部剔除掉。先用两个进程之间,完成通信的工作模拟。把这些调通后,全部放下,独立去调试无线网络部分。最后再合起来。不要连着一起开发。会死人的。主要是边界不稳定造成的。比如你对消息的处理代码有BUG,在调试,假设是数据丢失,但是这个阶段,无线网络就是TMD的稳定,你怎么玩?这些代码当作调试过了?经常有人这么玩结果设计出不了实验室。
0
捞炳成
捞炳成

原则上,多线程要考虑3个问题:

1) 临界区:须避免死锁。

2) 负荷能力:评估设备能力,使用队列,并发数要有上限。

3) 同步问题:有些动作是连续的,即使多线程也不能例外。

 

0
Monkey
Monkey

以socket为例(不管是蓝牙还是WIFI,都一样)

1。建立服务,不要在这里写了任何和数据有关的操作。

2。连接socket,一旦连接成功,建立一个socket连接线程,该线程基本上就是只干一件事情,不停的收数据,同上他只负责接收数据,尽可能少的处理数据。

3。收到数据之后将数据发给消息队列,一定是同步队列,注意队列的容量问题,可以在第2部启动新线程加入服务,直接在第2步里添加会直接导致队列满的时候被阻塞,进而接收数据的线程无法继续接收数据了。

4。消息队列增加一个接收者的线程,一旦捕获到新的数据,就立刻启动一个新线程处理数据,这个时候尽量不要在这个接收线程里处理数据了。如有写入操作要放在一个同步的线程里,任何处理消息线程读写都必须使用这个线程进行。

这个过程大概如此,但是有一些细节,比如数据的预处理上,你可以在socket接受线程里做,如理一些数据格式,无效数据的问题等等,如果这只是一些很简单的操作,比如byte数据变成string可以再这里做,如果是更复杂的操作建议分担到第4,但是这里也要注意,如果是一些数据处理共同需要的,可以在那个队列接收的线程里处理,但是要注意业务往往是变化的,如果你满足了目前的业务,万一哪一天业务要改变了可能某些数据处理不同了,所以写在接收分发线程里的东西要确定这是所有数据都需要的处理,不会因业务改变而改变。

如果设备的读写性能有限,那么很有必要在读入的时候使用队列服务,不过这大多数时候不用,因为现在IO的性能是很强,特别java之类都自己提供了缓冲服务,你只要注意同步问题就可以了,不要前面的线程写入的数据,被后面线程擦掉了。

 

 

返回顶部
顶部