ScriptFans 发表于 2016-3-25 15:03:12

【已解决】请教_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设置的环境变量也不知道有什么用。
请教哪位给解释解释!

afan 发表于 2016-3-25 17:23:18

包含这个函数库则运行了 __CoProcStartup()
LZ的答案可以在这个函数定义里看到

ScriptFans 发表于 2016-3-25 18:56:38

本帖最后由 ScriptFans 于 2016-3-25 19:15 编辑

看到了,感谢兄弟,原来Execute()和Call()可以执行函数。
不过还是有个疑问:__CoProcStartup()是在include的时候就执行了吗,而_CoProc是在之后执行的啊,这样的话__CoProcStartup()又怎么能运行由_CoProc指定的函数呢?
为谢!

afan 发表于 2016-3-25 19:13:20

执行到 #include 'CoProc.au3' 自然就执行了该函数。新进程自然就通过该函数运行了指定函数。

ScriptFans 发表于 2016-3-25 19:28:45

回复 4# afan

是的,include的时候__CoProcStartup确实运行了,只是那时环境变量(CoProc)还未设置,所以不会有动作。
但是在调用__CoProc设置环境变量后,并没再次运行__CoProcStartup来启动目标函数啊

afan 发表于 2016-3-25 19:35:35

调用__CoProc设置环境变量后运行了新进程啊!

ScriptFans 发表于 2016-3-25 20:13:49

哦哦,明白了,运行新进程的时候在include的时候会再次执行__CoProcStartup,该函数根据环境变量执行目标函数后Exit.
非常感谢afan兄!!
页: [1]
查看完整版本: 【已解决】请教_CoProc()函数