找回密码
 加入
搜索
查看: 2641|回复: 6

[系统综合] 【已解决】请教_CoProc()函数

  [复制链接]
发表于 2016-3-25 15:03:12 | 显示全部楼层 |阅读模式
本帖最后由 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设置的环境变量也不知道有什么用。
请教哪位给解释解释!
发表于 2016-3-25 17:23:18 | 显示全部楼层
包含这个函数库则运行了 __CoProcStartup()
LZ的答案可以在这个函数定义里看到
 楼主| 发表于 2016-3-25 18:56:38 | 显示全部楼层
本帖最后由 ScriptFans 于 2016-3-25 19:15 编辑

看到了,感谢兄弟,原来Execute()和Call()可以执行函数。
不过还是有个疑问:__CoProcStartup()是在include的时候就执行了吗,而_CoProc是在之后执行的啊,这样的话__CoProcStartup()又怎么能运行由_CoProc指定的函数呢?
为谢!
发表于 2016-3-25 19:13:20 | 显示全部楼层
执行到 #include 'CoProc.au3' 自然就执行了该函数。新进程自然就通过该函数运行了指定函数。
 楼主| 发表于 2016-3-25 19:28:45 | 显示全部楼层
回复 4# afan

是的,include的时候__CoProcStartup确实运行了,只是那时环境变量(CoProc)还未设置,所以不会有动作。
但是在调用__CoProc设置环境变量后,并没再次运行__CoProcStartup来启动目标函数啊
发表于 2016-3-25 19:35:35 | 显示全部楼层
调用__CoProc设置环境变量后  运行了新进程啊!

评分

参与人数 1金钱 +20 收起 理由
ScriptFans + 20 感谢耐心解答!!

查看全部评分

 楼主| 发表于 2016-3-25 20:13:49 | 显示全部楼层
哦哦,明白了,运行新进程的时候在include的时候会再次执行__CoProcStartup,该函数根据环境变量执行目标函数后Exit.
非常感谢afan兄!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-6 00:31 , Processed in 0.075048 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表