papapa314 发表于 2011-9-19 01:21:20

多进程通讯udf的错误

最近研究了下其他语言的多线程,再回过头来看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

wua0550 发表于 2011-9-20 17:13:50

这个很有用之前就用过coproc.au3确实不能通讯

qxguoxing 发表于 2019-10-28 14:20:25

有点高深,目前级别表示理解欠缺,努力中!
页: [1]
查看完整版本: 多进程通讯udf的错误