怎样实现呢
比如A  过程和B 过程都要用到某个函数function但function保证A.B不能同时使用,如果同时调用了function,那么后调用 的那个过程就要延迟执行function.

解决方案 »

  1.   

    function中多加一个传入参数,判断是哪个过程调用的,也就是一个过程调哪个function时,要传给哪个function一个标记自己的值,在function还得加个全局变量,以判断function是否处于执行状态
      

  2.   

    不是这样的,关键是  某个过程调用这个function的时候,需要等着function被调用 再调用 重要是这个等待
      

  3.   

    建立一个命令队列池,和一个全局标志变量,然后循环调用FUNCTION,在FUNCTION里根据全局标志变量判断是执行还是退出。
      

  4.   

    用Mutex互斥内核对象就可以'in a form module
    Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (ByVal lpMutexAttributes As Long, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
    Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Const INFINITE = &HFFFF      '  Infinite timeoutPrivate m_hMutex As Long            '互斥内核对象句柄'利用互斥内核对象进行互斥,保证只能有一个线程访问
    Private Function GetOneNumber() As Long
        Static lResult As Long
        WaitForSingleObject m_hMutex, INFINITE
        lResult = lResult + 1
        ReleaseMutex m_humtex
        GetOneNumber = lResult
    End FunctionPrivate Sub Form_Load()
        '建立内核对象
        m_hMutex = CreateMutex(0&, 0&, "Base_Mutex")
        
        '建立两个计时器同时访问GetOneNumer(),进行测试
        Timer1.Interval = 100
        Timer2.Interval = 30
    End Sub'如果建立了Mutex互斥,则在窗体销毁时关闭内核对象
    Private Sub Form_Unload(Cancel As Integer)
        If m_hMutex <> 0 Then CloseHandle m_hMutex
    End Sub'计时器事件
    Private Sub Timer1_Timer()
        Text1.Text = GetOneNumber() & vbCrLf & Text1.Text
    End SubPrivate Sub Timer2_Timer()
        Text2.Text = GetOneNumber() & vbCrLf & Text2.Text
    End Sub
      

  5.   

    seabird125(海鸥) ( ) 信誉:60    Blog  2006-12-5 15:40:55  得分: 0  重要是这个等待//要求不高的话,就用循环吧..... Public Running As Boolean            '函数是否在执行Public Function TestFun(Byval S1 as long,Byval S2 as long)as boolean
           TestFun=False
           if Running=True then 
               exit function
           end if
           Running=True
           [你的处理过程->Start]
                .
                .
                .
                .
           [你的处理过程->End]
           Running=false
           TestFun=True
    End function调用时:do 
        if testfun(s1,s2)=True then exit do
        sleep 1
    loop这样应该不是个好办法...如果要求高,就CreateThread,把调用过程放一个Thread里去吧.
      

  6.   

    PS:放线程里时,那个Sleep 1才能有效降低CPU占用率......不然还是100%....:(
      

  7.   

    很简单啊.
    function 共用()
    Static  Run as boolen
    if run  then 
      do until run=false
        doevents
        sleep 1
      loop
    end if
    'your code
    run=false
    end function