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