在vb6.0下,怎样通过串口通信,实现实时监测外部数据,监测到数据有变化时,系统能够做出相应的处理,不过不能占用系统太多资源,在网上找了一下,发现用多线程能实现,可是,vb6.0不支持多线程编程,怎么办呢?有没有其他好的办法?请各位大侠帮帮忙!!
另外,我想确切指到,vb6.0到底支不支持多线程编程,权威的解答!!!!

解决方案 »

  1.   

    VB6支持,但想要实现很好的支持很难。你的要求只要写OnComm事件就可以了。
      

  2.   

    用oncomm事件吧,把rtthreshold设成1,这样有数据来就会产生事件,然后在事件中接收数据并进行处理!
      

  3.   

    但是,我查了一下,oncomm事件,使用了MSComm控件。可是,在多线程里面,不支持控件使用的,怎么办呢?关键在于,在进行串口通信的同时,不能影响系统的正常使用,只有当接收到错误的数据时,才进行相应的处理?我对这方面了解不多,请多赐教!
      

  4.   

    哦,对了,使用oncomm事件,会不会占用很多系统的资源,让系统运行速度变慢呢?还是影响很小呢?
      

  5.   

    oncomm应该比较节省系统资源啊,总比循环查询要好的多,windows就是基于事件的,所以用起来比较方便和高效的!
      

  6.   

    监控的同时,DoEvents 一下。
      

  7.   

    楼主,我劝你VB6下你最好不要考虑多线程,多半会适得其反的,我曾经也想用多线程实现多个串口的多线程串口通信,但程序很容易就崩溃了,查阅了很多资料,加之我水平不够,放弃了。如果你的程序是商用的,多线程请慎用,可以使用DoEvents来提高程序的响应。
      

  8.   

    这个问题刚开始我也是头疼
    我一个串口要实时接收六个仪表,一共二十几个参数值.而且仪表的通讯协议是被动方式的.即PC要发送指令仪表才返回数据.这样一来,要不断的发送指令,不断的接收及处理,还要不断的往数据库写入!!我是采用轮询方式的,用TIMER作个扫描周期,TIMER事件初关掉TIMER,执行扫描完再开,这样可以有效的压缩TIMER内部时间在读取函数中加入DoEvents,基本可以了.CPU占用率一直在57%左右.一般的操作不会卡死.测了一天也没问题但是偶尔在数据库操作的时候,比如查询历史数据,会卡死:(
    真也找不到好办法呀~~~听朋友说,用VB.NET可以采用多线程解决~~~可惜没玩到这个东西过.
    期待楼主的问题得到真正的解决!
      

  9.   

    我们的项目,用的是vb6.0环境开放的,如果要换成.net环境下,就要改动很大了,况且这个项目基本快结束了……时间也来不及……
    各位,我们大家一起都再研究研究……看看有没有什么其它好的解决办法……
    如果,确实不行的话,就用oncomm进行处理……
    毕竟这也是一种办法……
      

  10.   

    如果你的仪表的实时性要求不是很高(个人认为3秒以内要将这20多个参数读取一遍,这样实时性要求就比较高了),你可以设置一个轮读变量,在Timer中使用Select Case 语句来依次读取每一个参数,每次读一个。比如,你的Timer的Interval是200ms,那么你读完我、所有的参数耗时大约是:200ms X 20=4000ms 也就是4秒,其实这个实时性已经很高了。我11个仪表,都是这样处理的。
      

  11.   

    1.采用多进程,几十个串口程序一起运行
    2。每个程序都采用查询式的
    3.接受缓冲区开20000字节
    剩下的什么时间片全部交给xp去处理。一个查询就可以让cpu90%,50个查询还是这个样子。自己试一下!
      

  12.   

    DOS 的中断在XP里面还有吗?