【已解决】请教_CoProc()函数
本帖最后由 ScriptFans 于 2016-3-25 20:14 编辑这是CoProc.au3里面用于启动新进程的函数,它用一个独立进程运行一个指定函数,用于实现近似多线程效果,但是这个_CoProc()函数代码我反复看了几遍没看出来它是怎么运行指定函数的,代码如下:Func _CoProc($sFunction = Default, $vParameter = Default)
Local $iPid, $iOldRunErrorsFatal
If IsKeyword($sFunction) Or $sFunction = "" Then $sFunction = "__CoProcDummy"
;$iOldRunErrorsFatal = Opt("RunErrorsFatal", 0)
EnvSet("CoProc", "0x" & Hex(StringToBinary ($sFunction)))
EnvSet("CoProcParent", @AutoItPID)
If Not IsKeyword($vParameter) Then
EnvSet("CoProcParameterPresent", "True")
EnvSet("CoProcParameter", StringToBinary ($vParameter))
Else
EnvSet("CoProcParameterPresent", "False")
EndIf
If @Compiled Then
$iPid = Run(FileGetShortName(@AutoItExe), @WorkingDir, @SW_HIDE, 1 + 2 + 4)
Else
$iPid = Run(FileGetShortName(@AutoItExe) & ' "' & @ScriptFullPath & '"', @WorkingDir, @SW_HIDE, 1 + 2 + 4)
EndIf
If @error Then SetError(1)
;Opt("RunErrorsFatal", $iOldRunErrorsFatal)
Return $iPid
EndFunc ;==>_CoProc
里面的Run()函数只是运行了一个AutoIt3.exe,并没有看到加入Function,还有EnvSet设置的环境变量也不知道有什么用。
请教哪位给解释解释! 包含这个函数库则运行了 __CoProcStartup()
LZ的答案可以在这个函数定义里看到 本帖最后由 ScriptFans 于 2016-3-25 19:15 编辑
看到了,感谢兄弟,原来Execute()和Call()可以执行函数。
不过还是有个疑问:__CoProcStartup()是在include的时候就执行了吗,而_CoProc是在之后执行的啊,这样的话__CoProcStartup()又怎么能运行由_CoProc指定的函数呢?
为谢! 执行到 #include 'CoProc.au3' 自然就执行了该函数。新进程自然就通过该函数运行了指定函数。 回复 4# afan
是的,include的时候__CoProcStartup确实运行了,只是那时环境变量(CoProc)还未设置,所以不会有动作。
但是在调用__CoProc设置环境变量后,并没再次运行__CoProcStartup来启动目标函数啊 调用__CoProc设置环境变量后运行了新进程啊! 哦哦,明白了,运行新进程的时候在include的时候会再次执行__CoProcStartup,该函数根据环境变量执行目标函数后Exit.
非常感谢afan兄!!
页:
[1]