|
最近研究了下其他语言的多线程,再回过头来看coproc.au3的多进程原理,发现原来多进程之间的通讯是通过读写注册表来实现的,于是写下了如下测试代码,发现udf有bug,应该将_SuperGlobalget函数里的BinaryToString ("0x" & $vTmp)改为BinaryToString ($vTmp)方能正确显示共享数据,如下代码测试成功。
#include<coproc.au3>
_SuperGlobalSet("多进程通讯",1)
_coproc("prochl")
For $i=1 To 100
Sleep(1000)
ToolTip(BinaryToString(_SuperGlobalget("多进程通讯")))
Next
Func prochl()
For $i=1 To 100
_SuperGlobalSet("多进程通讯",$i)
Sleep(3000)
Next
EndFunc
Func _SuperGlobalGet($sName, $fOption = Default, $sRegistryBase = Default)
Local $vTmp
If $fOption = "" Or $fOption = Default Then $fOption = False
If $sRegistryBase = Default Then $sRegistryBase = $gs_SuperGlobalRegistryBase
$vTmp = RegRead($sRegistryBase, $sName)
If @error Then Return SetError(1, 0, "") ; Registry Problem
If $fOption Then
_SuperGlobalSet($sName)
If @error Then SetError(2)
EndIf
Return BinaryToString ($vTmp);BinaryToString ("0x" & $vTmp)
EndFunc ;==>_SuperGlobalGet |
|