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
← Sw函數 SyncUnlock →