弱问一下VB里面两个SUB是不是可以同步执行的啊?我有一工程,里面一个SUB是用来采样电流值,并存在一个数组里面,并将采样的电流描绘出来.
还有一个SUB就是根据上一个SUB所得到的采样数据进行计算.这个Sub在按下界面上的计算按钮之后才会运行
此外在form_activate里面也是有采样电流,并绘图的功能的,就是将刚才第一个Sub的一部分代码的.我想问一下,就是说在我按下计算按钮的时候,也就是说执行计算功能的那个SUb的时候,采样还有绘图的那个SUB还执不执行啊?就是说是不是一遍计算,一边采样绘图啊?还是仅仅执行计算那个SUB???比较弱的一个问题,但是调试的时候有些莫名其妙的错误.我觉得这两个SUB是共用一段数组的(这个数组用来保存采样值的).是不是这个原因.要不要加锁啊??谢谢大侠赐教!急!

解决方案 »

  1.   

    不好意思,拿LZ帖子测试一下,这几天一直发不了贴,也不能恢复,郁闷!
    我想问一下,就是说在我按下计算按钮的时候,也就是说执行计算功能的那个SUb的时候,采样还有绘图的那个SUB还执不执行啊?就是说是不是一遍计算,一边采样绘图啊?还是仅仅执行计算那个SUB???
    _____________________________________________________________________________
    按下计算按钮仅仅执行计算比较弱的一个问题,但是调试的时候有些莫名其妙的错误.我觉得这两个SUB是共用一段数组的(这个数组用来保存采样值的).是不是这个原因.要不要加锁啊??
    __________________________________________________________________________
    什么错误?显然计算与采用的数据是需要共享.
      

  2.   

    SUB是子过程,VB是由若干个过程编写出来的。过程之间可以互相调用。你看看,哪个事件触发了它就抓住它怎么运行的了。比如按钮的按下事件:
    Private Sub Command1_Click()
        ........
    End Sub
    当按钮按下时触发Sub Click()事件。
      

  3.   

    要加锁也简单啊,定义一个全局变量, locked ,
    在各SUB这样写
    sub xxx(yyy)
    if locked then 
     '上锁啦,要退出还是等待随你定
    endif
    locked=true...'你的代码locked=false
    end sub
      

  4.   

    那问一下form_activate是不是一直都运行的呢???
    或者说,在窗体刚创建的时候,运行的是form_activate.但是一会儿我按了计算按钮呢,那时候计算按钮固然执行,但是form_activate里面的代码还执不执行啊?
      

  5.   

    Form_activate描述如下,跟你按了计算按钮没有必然联系
    _________________________________________________________________Activate -当一个对象成为活动窗口时发生。
    说明一个对象可以通过诸如单击它,或使用代码中的 Show 或 SetFocus 方法之类的用户操作而变成活动的。Activate 事件仅当一个对象可见时才发生。例如,除非使用 Show 方法或将窗体的 Visible 属性设置为 True,否则,一个用 Load 语句加载的窗体是不可见的。
      

  6.   

    我明白搂住的意思了,我来罗索两句 ,各个sub是需要执行的时候才执行。
    比如command1_click,就是command1被点击的时候才执行。执行完了就退出这个sub了。等待执行其他的。
    还有Form_activate等,这种是控件的事件sub,是事件发生时候触发的。一般的vb程序,都可以认为是“单线程”的,就是说计算机控制只有一个,在这里还没有执行完的时候,不能跑到那里执行(处理后可以)。比如
    sub command1_click
    111
    222
    333
    end subsub command2_click
    aaa
    bbb
    end sub
    你点了command1,计算机执行111,222,333,如果执行到222的时候点了command2,他不会马上取执行aaa,bbb,而是等222,333执行完了后才去执行aaa,bbb。 当然执行速度一般很快,几微秒感觉不出,如果要执行很久的,那期间你的程序就没法响应事件。 ps :doevents可以解决这个问题。
      

  7.   

    也可以用API实现多线程阿。你可以去搜索一下网络中的帖子或文章。还有一宗方法,就是用Timer控件:
    把form_activate和sub的内容分别放到两个timer控件的_Timer事件里面。把timer控件的interval设到足够小windows的CPU时间片是55,然后在需要同时触发timer控件。不过这样一来楼主的显示和采样可能就不同步了,具体实现方法还要你自己去想了!