找回密码
 加入
搜索
查看: 3350|回复: 7

[GUI管理] 多线程问题(子进程回传参数)

  [复制链接]
发表于 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
 楼主| 发表于 2016-4-10 21:19:08 | 显示全部楼层
怎么没有人啊,我自己顶
发表于 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
 楼主| 发表于 2016-4-11 07:37:36 | 显示全部楼层
回复 3# ScriptFans


    用了你写的代码,还是只能运行一个msgb(),fun()还是运行不了。是不是编译器版本的问题?
发表于 2016-4-11 11:05:45 | 显示全部楼层
本帖最后由 ScriptFans 于 2016-4-11 11:10 编辑

抱歉昨天没仔细看,原来你指定了receiver,我这里运行后函数fun同样没有接收到子进程发来的信息
发表于 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
发表于 2016-7-10 12:08:16 | 显示全部楼层
回复 1# wogawa


    楼主的第一段程序本身没有问题,直接可以运行,fun()函数也正常.
注意第一段程序中有一段延时:  Sleep(3000),把这个延时直接屏蔽掉,可以很快看到fun()函数运行的结果.
   反而是第二段程序里面,重复定义了3次fun()函数,完全是多余,把后面2次定义屏蔽,一点也不影响程序运行.
发表于 2016-7-10 12:11:47 | 显示全部楼层
并且,第二段程序中的命令:  _CloseHandle($pid)
完全没有任何效果,应该直接删除.
  _CloseHandle($pid),并不是关闭子进程,因为楼主的$pid只是一段字符串.这里变量名和变量显然错乱.
另外:即使$pid是某个子进程的ID,好像_CloseHandle()函数也不能正常运转,这个函数可能有错误.反正基本上也没什么用.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-25 23:35 , Processed in 0.072897 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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