CriticalObject

用于封装对象以供多线程使用的内置函数。可以从多个线程使用此类对象,而不会导致崩溃。


OutputVar := CriticalObject(Object, lpCriticalSection)
函数示例: obj := CriticalObject(MyCriticalObject)

参数

OutputVar(输出变量)

用于存储创建的对象的变量的名称。

Object(对象,可选)

现有的Object或者CriticalObject来使用,这也可以是一个指针。
当给出 CriticalObject 时,其 CriticalSection 将被使用,第二个参数将被忽略。
当此参数为空时,将创建并使用新对象。

lpCriticalSection(临界区指针,可选)

指向a的指针 CriticalSection 使用。当省略此参数时,将创建新的 CriticalSection,除非在第一个参数中给出 CriticalObject,则将使用其 CriticalSection。

一般备注

它如何工作:

要从 CriticalObject 检索原始对象,请使用:

object := CriticalObject(CriticalObject,1)

要检索指向 CriticalSection 的指针,请使用:

lpCriticalSection := CriticalObject(CriticalObject,2)

当删除对内部对象的最后一个引用时,CriticalSection 也会被删除。

示例

obj := CriticalObject() ; 创建新的关键对象
Loop, 4 ; 创建 4 个线程。
 AhkThread%A_Index% := AhkThread("obj:=CriticalObject(" (&obj) ")`nLoop`nobj[" A_Index "]:= A_Index")
 
Loop ; 显示对象的当前内容。
 ToolTip % obj.1 "`n" obj.2 "`n" obj.3 "`n" obj.4
Esc::ExitApp