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次只有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 →