当前位置:编程学习 > VB >>

VB怎么实现不断查询条件是否满足

有一个问题深深的困扰着我。。。可我是个菜鸟,没有做过类似的项目,所以无奈之下,只好来到CSDN求助。。

我要实现这样的功能:在一个过程中,当满足一定的条件时,我会执行某段代码。判断的条件有两个,三个或者更多。经过思考,检查我想出了几种方案:如下

1.使用定时器,不断判断条件是否满足
Private Sub Timer1_Timer()
  
  If 条件1 = True And 条件2 = True And 条件3 = True Then
    ...执行代码..
  End If
  
End Sub

2.自己编写一个死循环
Public Sub power()
  Dim Condition As Boolean
  Condition = True                '自己设定一个循环条件
  Do While Condition = True       '不断的循环判定是否满足条件,一旦满足条件则执行我想执行的代码
    
    If 条件1 = True And 条件2 = True And 条件3 = True Then
      ...执行代码..
    End If
    
  Loop
End Sub

但是我发现,使用以上两种方法编程,会使程序死掉,另外CPU使用率升到50%.不知道有没有什么其他的方法,能够不停地循环判断条件是否满足,一旦条件满足我的要求,则执行想要执行的代码!!




VB 循环 轮询 判断 往“事件”上靠...... 定时器不会让程序死掉。

第二个办法,可以加上一个Sleep(10);
引用 2 楼 caozhy 的回复:
定时器不会让程序死掉。

第二个办法,可以加上一个Sleep(10);

1.用定时器会加重CPU的负担,因为我对实时性要求比较高,定时器时间常数为1ms的时候就更不用说啦
2.加上sleep后还是一样,程序假死,界面上的其他按钮不能操作
引用 1 楼 Topc008 的回复:
往“事件”上靠......

怎么往“事件”靠?可以给个小例子么 ,实例什么的,不懂呀,,,,,,,,,大虾虾虾虾虾~~~~~~~~~~~~
引用 3 楼 rewsna3 的回复:
Quote: 引用 2 楼 caozhy 的回复:

定时器不会让程序死掉。

第二个办法,可以加上一个Sleep(10);

1.用定时器会加重CPU的负担,因为我对实时性要求比较高,定时器时间常数为1ms的时候就更不用说啦
2.加上sleep后还是一样,程序假死,界面上的其他按钮不能操作

这些条件是怎么被改变的? 要么你给出完整的代码,要么你自己看,例子在我说的《VB程序员指南》上有。 在循环处理时适时释放系统控制权:
Public Sub power()
  Dim Condition As Boolean
  Condition = True                '自己设定一个循环条件
  Do While Condition = True       '不断的循环判定是否满足条件,一旦满足条件则执行我想执行的代码
    
    If 条件1 = True And 条件2 = True And 条件3 = True Then
      ...执行代码..
    End If
    DoEvents '*****
  Loop
End Sub

一般来说,Timer 方案应该不会造成“假死”,除非你的时间间隔设置得太短。 不知道你的条件是怎么产生的,猜测一下:
用n个label控件储存n个条件的值,然后通过Label1_Change事件判断这n个label的值是否满足你的要求,如果满足,就执行一定的代码。

当然也可以通过类模块来自定义事件,更加灵活..... 楼主这样提问很不好.

你至少要把你的要求说个明白, 比如你需要多久判断一次,判断的是什么条件, 判断条件是来自什么地方等等. 至于你贴的代码倒是其次的. 根本没能说明问题.

不要别人说一个,你就冒一个条件出来,淋漓不尽很费劲啊.
引用 3 楼 rewsna3 的回复:
Quote: 引用 2 楼 caozhy 的回复:

定时器不会让程序死掉。

第二个办法,可以加上一个Sleep(10);

1.用定时器会加重CPU的负担,因为我对实时性要求比较高,定时器时间常数为1ms的时候就更不用说啦
2.加上sleep后还是一样,程序假死,界面上的其他按钮不能操作

如果真是这样,不适合用VB做,定时器最小大约20ms,再小的没多大意义,跑个空事件也是要花掉不少时间的。 应该是个数据采集类的程序吧,我觉得先参考一下别人的东西,采集频率什么的,然后来确实自己需要的速度,要求快的话就只能用C去做了,VB不适合干这个,然后费时的过程尽量分解成小过程来调用。
比如
If 条件1 = True And 条件2 = True And 条件3 = True Then
      ...执行代码..(运行要花一年)
End If
然后说,我要我的程序快起来,这样的话怎么给你出主意呢?
如果这部分的代码运行时间超过100ms的话你就需要想办法分解了。
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,