多线程问题(子进程回传参数)
本帖最后由 wogawa 于 2016-4-11 08:22 编辑请问为什么Fun()函数始终不能运行?有知道的朋友吗
#include "CoProc.au3"
_CoProcReciver("fun")
$Pidmsgb = _CoProc("msgb",'传给子进程的字符串')
MsgBox(0,'父进程','子进程PID:'&$Pidmsgb)
Func msgb($pid)
MsgBox(0,'子进程接收到',$pid)
Sleep(3000)
_CoProcSend($gi_CoProcParent,'发到父进程')
Endfunc
Func fun($vParameter);接收消息后执行
MsgBox(0,'父进程','父进程接收到:'&$vParameter)
EndFunc
已解决!
#include "CoProc.au3"
Local $hPID1_fun,$hPID_msgb
$hPID1_fun=_CoProcReciver("fun")
$hPID_msgb = _CoProc("msgb",'传给子进程的字符串')
MsgBox(0,'父进程','子进程PID:'&$hPID_msgb)
$hPID1_fun=_CoProcReciver("fun")
Func msgb($pid)
_CoProcReciver("fun")
MsgBox(0,'子进程接收到',$pid)
Sleep(1000)
_CoProcSend($gi_CoProcParent,'aaaaaa')
_CloseHandle($pid)
Endfunc
Func fun($vParameter);接收消息后执行
MsgBox(0,'父进程',$vParameter)
EndFunc 怎么没有人啊,我自己顶 本帖最后由 ScriptFans 于 2016-4-11 11:07 编辑
我这里两个子进程都可以正常运行.
稍微改了一下,退出之前加上了结束子进程:
#include "CoProc.au3"
Local $hPID1_fun,$hPID_msgb
$hPID1_fun=_CoProcReciver("fun")
$hPID_msgb = _CoProc("msgb",'传给子进程的字符串')
MsgBox(0,'父进程','子进程PID:'&$hPID_msgb)
ProcessClose($hPID1_fun)
ProcessClose($hPID_msgb)
Func msgb($pid)
MsgBox(0,'子进程接收到',$pid)
Sleep(3000)
_CoProcSend($gi_CoProcParent,'发到父进程')
Endfunc
Func fun($vParameter);接收消息后执行
MsgBox(0,'父进程','父进程接收到:'&$vParameter)
EndFunc 回复 3# ScriptFans
用了你写的代码,还是只能运行一个msgb(),fun()还是运行不了。是不是编译器版本的问题? 本帖最后由 ScriptFans 于 2016-4-11 11:10 编辑
抱歉昨天没仔细看,原来你指定了receiver,我这里运行后函数fun同样没有接收到子进程发来的信息 测试_CoProcSend发送信息失败,原因不详,这个CoProc.au3我只用了_CoProc函数还可以,其他函数几乎都不能用了,可能和版本有关系,估计需要对其进行修改,这就得花点时间读代码了。
#include <CoProc.au3>
Local $hPID_msgb
_CoProcReciver("fun")
$hPID_msgb = _CoProc("msgb","To Child")
Sleep(3000)
ProcessClose($hPID_msgb)
Func msgb($sPara)
MsgBox(0,'子进程接收到',$sPara,1)
$iReturn=_CoProcSend($gi_CoProcParent,'To Parent')
MsgBox(0,"return:",$iReturn)
Endfunc
Func fun($sPara)
MsgBox(0,'父进程','父进程接收到:'&$sPara)
EndFunc 回复 1# wogawa
楼主的第一段程序本身没有问题,直接可以运行,fun()函数也正常.
注意第一段程序中有一段延时:Sleep(3000),把这个延时直接屏蔽掉,可以很快看到fun()函数运行的结果.
反而是第二段程序里面,重复定义了3次fun()函数,完全是多余,把后面2次定义屏蔽,一点也不影响程序运行. 并且,第二段程序中的命令:_CloseHandle($pid)
完全没有任何效果,应该直接删除.
_CloseHandle($pid),并不是关闭子进程,因为楼主的$pid只是一段字符串.这里变量名和变量显然错乱.
另外:即使$pid是某个子进程的ID,好像_CloseHandle()函数也不能正常运转,这个函数可能有错误.反正基本上也没什么用.
页:
[1]