日期:2014-05-17  浏览次数:21005 次

大家帮帮看俺应该怎么处理,需要多线程吗?
我们头给了我一个程序,打开后就是图片显示那样的,他的需求是:现在的每个块(检测站)是在一个线程上的,如果一个监测站死掉的话,整个程序都得重启,所以头希望我把这些监测站分开,每个监测站是独立,假如一个死掉的话,只要重启一个块就可以了,并不需要重启整个页面,而且这些监测站还是需要在一个页面上显示控制;第二个需求是如果一个检查站超过3分钟没有刷新就算是死掉,便需要重启。  
请问各位朋友们,应该怎么弄?

------解决方案--------------------
至于用不用多线程,你得根据实际需求;
1、说一下单线程吧:如果你使用单线程,在读取数据与显示数据时,他只能同时处理一项,若是从网络读取时需要3秒钟,那这3秒界面就无法响应,就是所谓的假死;若读完正在更新界面也要3秒,那这时即使有新的数据也需等待更新完成再读取。在读取时假设有一个节点网络断开(或异常,异常需处理),就需要超时设定,否则后面的节点不会被读取,界面也无法更新,就如你所说的全部死掉了。
2、两个线程:一个更新界面,一个通迅(后台线程),界面不会卡死,但通迅仍然存在节点网络故障或异常,需要处理或设置超时。但若节点很多,而且每个节点都需要较长时间,数据及时性差。多线程更新界面都需要同步到UI线程来处理。
3、界面一个 + 第个节点一个:仍然存在节点网络故障或异常,需要处理或设置超时,否则故障或异常节点无法继续工作。若有100节点?1000?1W?,是不是也要这样?显然这种是考虑无限资源。
4、线程池是一种可选方式。
5、自定义异步池,采用信号决定并发数量也是一种可选方式。
6、其他。
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

正好做了个和你这差不多的程序.其实没那么复杂,比如说我做的这个吧,站点是做到了能自动添加删除什么的了,做几个线程是必须的,可以把基本站点连接方试和数据存在内存,我这里是无线发些数据跟据设备号来确定的, 做个时钟定时发送检测数据命令下去,收到后存入内存,可以做成队列.再定时去访问内存就好了.
我的站点貌似没有那么多添加删除功能,就是连接检测站,我想做成一个站点是一个小线程,你觉得可以吗?
看你有多少站点吧,多测试下,我觉得站点这个是不定数,可能会不断增多,到时线程太多怕有问题,所以我做法是线程加队列.
我的也是不可确定的,使用的是动态label,请问你的每个站点现在是独立的吗?也就是一个站点死掉不会影响其他的站点,麻烦你能把你的思路说的详细一点吗?感谢了!
嗯,站点死掉是不会影响的,我做了个数据库用来存储站点信息,我的是和下位机通过无线来检测.页面上我用了tableLayoutPanel和panel这两个控件,还有些什么标签什么的都就用代码自动生成了,因为站点多,所以需要做分页,然后建个类,用于数据的交换通迅.类里做了个结构来存站点信息,然后做了个队列来存放任务排列优先级,做个定时器定时去读取队列中的任务发送到下位机,检查下位机是否正常工作.获取数据存入结构体中,页面中做个时钟不断读类中的结构体数据就好了.你可以先做着有不懂的大家交流下.有些我也没做得很好.