SyncLock

使用互斥鎖,對多項工作進行同步。

格式
SyncLock 信號編號 [, 超時]

參數

信號編號
以運算式或數值指定要接收的信號編號(0~63的整數)。
超時
以運算式或數值(實數)指定鎖定前等待的最長等待時間。可省略。

說明
SyncLock用於同步鎖定公共資源,以便1次只能用於1項工作。當某項工作用完公共資源時,則叫用SyncUnlock進行解鎖,讓其它工作得以使用該資源。

只有事先自行鎖定的syncID,方可將1個工作解鎖。

必須執行SyncUnlock才能解鎖工作。 結束工作時,則解除該工作所進行的鎖定。

若連續2次對相同信號編號執行SyncLock,則會發生錯誤。

若有指定超時參數,則請使用Tw函數檢查是否成功鎖定。

注意


就Epson RC+5.0而言,即便結束工作也不自動解除鎖定,而Epson RC+ 6.0、RC+ 7.0、Epson RC+ 8.0則會自動解除。


參照
Signal、SyncLock、Tw、Wait、WaitPos

SyncLock範例
在以下範例中,使用SyncLock和SyncUnlock進行設定,以便每次只有1項工作可將訊息寫入記錄檔中。

Function Main

    Xqt Func1
    Xqt Func2
Fend

Function Func1
  Long count
  Do
    Wait .5
    count = count + 1
    LogMsg "Msg from Func1, " + Str$(count)
  Loop
Fend

Function Func2
  Long count
  Do
    Wait .5
    count = count + 1
    LogMsg "Msg from Func2, " + Str$(count)
  Loop
Fend



Function LogMsg(msg$ As String)
  SyncLock 1
  OpenCom #1
  Print #1, msg$
  CloseCom #1
  SyncUnlock 1
Fend

以下是使用超時(選項)的SyncLock範例。使用Tw檢查是否成功鎖定。在使用超時等待鎖定資源時,可執行其它程式。

Function MySyncLock(syncID As Integer)
  Do
    SyncLock syncID, .5
    If Tw = 0 Then
      Exit Function
    EndIf
    If Sw(1) = On Then
      Off 1
    EndIf
  Loop
Fend