首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb 多线程,该怎么处理

2013-09-13 
vb 多线程需要一直监控串口读数据,用三个线程分别对三个串口进行监控,是三个线程完成之后再启动线程呢,还

vb 多线程
需要一直监控串口读数据,用三个线程分别对三个串口进行监控,是三个线程完成之后再启动线程呢,还是让线程一直循环运行,求解 多线程
[解决办法]
让线程一直循环运行
[解决办法]
从我10多年的工控经验来说,就楼主的这个问题,根本不需要用到多线程,只需要把这些通信放置到一个Timer控件中轮询通信即可。其次,VB本身不支持多线程,若你要实现多线程,需要有很高的编程知识水平,且VB多线程极其不稳定,一个不稳定的方案不论其构思多好,技术多先进,都是不值得采纳的。
故而建议楼主改一改设计思路。
[解决办法]
串口没必要多线程吧。

除非你想提高响应速度,因为数据过来--->处理---->再收数据,这个过程的时间必须小于数据过来后把缓冲区堆满的时间,不然就会丢数据。

但是也可以把收数据与处理数据分开,串口控件不是有事件么,在OnComm事件里把数据保存,然后设置一个处理数据的定时器就跳出,再在定时器事件里执行数据处理,就一般不会有什么事了。
[解决办法]
vb多线程要稳定的确要有足够的技术和经验才行,比如了解 win32 sdk 方式开发程序,同时了解windows系统以及内存管理方式、COM/COM+技术、VB本身的的运行管理方式以及相关的数据结构,还需要有一点专业外挂的开发经验,否则做起来就很吃力,并且还会不稳定,因为vb的多线程技术是利用系统的api向系统申请一个新的线程来运行指定程序,这时的程序运行环境就不再是运行在vb支持库的框架内了,而是运行在 Windows 的 win32 子系统中,所以,开发思路也不能再用vb的思路去写程序,必须换成 win32 sdk 的方式开发程序(可以理解成vc的win32 sdk开发方式),这时的很多vb函数、语句、对象都很有可能应为关联的资源权限、偏移地址等问题而出错,甚至连变量类型都要深思熟虑的使用,否则很容易出问题。可以说用vc来开发多线程会比vb这么弄简单、快速、稳定很多很多。

还有,串口通讯在vb里大致有几种方式
1、只用微软的控件
2、使用第三方的接口,如:控件、组件、API等
3、自己用系统 api 封装通讯过程。
就先说说微软控件吧,无论是在VB里或是VC下,这东西都可以说是个极度浪费资源、效率很低的东西,如果你注意看看你的CPU使用率你会发现,当你开始搞串口通讯后,特别是大量传输数据的时候CPU使用率会变得很高。估计微软不想用这东西让祢们做产品,或者说这东西出得太早了,当时没人会用电脑这么贵重的东西用到工控上,经过那么多年,现在还有人在用 vb6,碰到这种问题我想微软也预料不到。就我的感觉,微软的控件用来测试串口或写点简单的小工具还可以,如果要做成项目或工程级别的产品,就有可能设计效率和稳定性问题(如:除了串口还包括图形、UI、网络、运算类技术等等一起使用。),那么就不那么现实了,单串口这一块都很影响效率,从整个工程来看,这会带来很多不必要的麻烦和限制。

再说说第三方的接口,有的接口是很不错的,效率高、使用简单、稳定性好,这是比较理想的选择。不过给VB开发的接口我不知道,VC的我到有,我的资源里放了一个静态库的接口,有需要你可以下来看看,至于vb的你可以搜索看看,建议找第三方接口来用。

最后说一下自己用api来做串口通讯,就串口通讯上,分为同步与异步方式通讯,无论哪种方式,如果没有多线程的介入,单靠VB的主线程,会显的更加的卡(假死现象),所以用VB来做这一块要想做稳定,需要花很多功夫的,不是不行,而是更难。

热点排行