vb编写的串口程序运行几个小时以后,速度越来越慢,近似于死机状态,
但一开始并没有出现此情况。没有大量的数据库操作。用到将近10个timer控件,但是只有2个一直在工作中,其余都是满足一定条件才使用,用完立即关闭。这2个定时器(Timer1 和Timer2)的作用是 判断串口是否通信正常。%向下位机发送状态查询命名(若正常下位机会有响应)
Private Sub Timer1_Timer()
%Timer1.interval=3000
%程序段略
End SubTimer1控件命令发送后,若正常下位机会有响应,则置布尔型变量s=true,否则s仍为初始值s=false%判断下位机响应
Private Sub Timer2_Timer()
%Timer2.interval=4000
if s=true then
   s=false
else
%报警,显示串口通信失败 程序段略
endif
End Sub不是什么原因造成近似于死机状态,与tiemr有关吗?怎么改?急,在线等!

解决方案 »

  1.   

    谢谢TomyChoi 回复如果是这个问题,怎样分析哪些资源没被释放吗?对于用到的数据库ADO对象,在退出软件Form_Unload里都释放了
      

  2.   

    TomyChoi 
    還有看看會不會十個定時器同時被起動,裏面的代碼在不停的等待處理的可能
    共有四个定时器是同时被启动的,问题在这里吗?
      

  3.   

    我有一个工控机代码,共加载7个窗体,总共使用了14个TIMER计时器。
    遇到过你的问题。后来仅将串口通信部分全部放一个窗体,通过定时瞬间关闭该通信窗体,随后即刻加载该通信窗体。能连续运行几天,不出错。
      

  4.   

    回复楼上zdingyun但是我所有的串口通信部分和定时器都在一个窗体内啊
      

  5.   

    To:amityliu
    我的通信主窗体不用TIMER计时器,接收和发送数据通过全局变量传递.
      

  6.   

    用到10个time控件,有点多,应该考虑程序设计思路!!
      

  7.   

    我以前也碰到过这个事情,可以和楼主分享一下经验。VB对资源的释放很多程度都不需要程序员自己来做的,所有有些地方容易忽略。记得有一次,我们碰到了如此的情况
    经过了大量的检查,发现是在一个记录状态的地方,一直在象一个TEXT控件写入文本短时间内是没什么问题在长时间后,程序的速度越来越慢,占用CPU越来越厉害。。后来,及时清理控制了TEXT控件的TEXT长度,问题就解决了,
      

  8.   

    简洁的说在写可能长时间运行的代码的时候。应该注意可能无限被扩大的一些对象。
    特别注意: text.text  list.list 其他应该每什么问题,VB的定时器还是比较稳定的,我想开个2,3十个没啥问题。
      

  9.   

    根据功能划分为模块,每个模块用dll实现,保证速度没有问题。
      

  10.   

    帖子发了好久了,不好意思,今天结帖给分!正如shaoke所说的,长时间通讯数据使得text.text  对象不断扩大,导致死机。只要将text.text在适当的时候清空即解决问题!谢谢各位的帮助!谢谢shaoke!谢谢csdn!每次都能从csdn得到想要的答案!
      

  11.   

    呵呵,还真有不少人犯这种错误啊
    对 text1.text = text1.text & str
    这样的操作是相当耗时的解决的办法是 
    str = str & strAdd
    text1.text = strstr设置一定的大小,注意不要溢出