wogawa 发表于 2016-4-10 21:04:53

多线程问题(子进程回传参数)

本帖最后由 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

wogawa 发表于 2016-4-10 21:19:08

怎么没有人啊,我自己顶

ScriptFans 发表于 2016-4-10 23:31:39

本帖最后由 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

wogawa 发表于 2016-4-11 07:37:36

回复 3# ScriptFans


    用了你写的代码,还是只能运行一个msgb(),fun()还是运行不了。是不是编译器版本的问题?

ScriptFans 发表于 2016-4-11 11:05:45

本帖最后由 ScriptFans 于 2016-4-11 11:10 编辑

抱歉昨天没仔细看,原来你指定了receiver,我这里运行后函数fun同样没有接收到子进程发来的信息

ScriptFans 发表于 2016-4-11 11:49:48

测试_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

ncxj 发表于 2016-7-10 12:08:16

回复 1# wogawa


    楼主的第一段程序本身没有问题,直接可以运行,fun()函数也正常.
注意第一段程序中有一段延时:Sleep(3000),把这个延时直接屏蔽掉,可以很快看到fun()函数运行的结果.
   反而是第二段程序里面,重复定义了3次fun()函数,完全是多余,把后面2次定义屏蔽,一点也不影响程序运行.

ncxj 发表于 2016-7-10 12:11:47

并且,第二段程序中的命令:_CloseHandle($pid)
完全没有任何效果,应该直接删除.
_CloseHandle($pid),并不是关闭子进程,因为楼主的$pid只是一段字符串.这里变量名和变量显然错乱.
另外:即使$pid是某个子进程的ID,好像_CloseHandle()函数也不能正常运转,这个函数可能有错误.反正基本上也没什么用.
页: [1]
查看完整版本: 多线程问题(子进程回传参数)