palkiller 发表于 2008-9-26 22:42:28

奇怪,为何子进程send信息给父进程一直flase?

#include <CoProc.au3>
#NoTrayIcon
HotKeySet("{esc}","esc")
GUISetState(@SW_SHOW)
msgbox(0,"提示","父进程ID为"&@AutoItPID)
$send=_CoProc ("Sender")
_CoProcReciver ("Reciver")

Func Reciver($vParameter)
        MsgBox(0,"成功","子进程发送的消息是:"&$vParameter)
EndFunc

Func esc()
        Exit
EndFunc

Func Sender()
        msgbox(0,"提示","父进程ID为"&$gi_CoProcParent&@lf&"子进程ID为"&@AutoItPID)
        for $i = 1 to 10
        $vParameter=_CoProcSend($gi_CoProcParent,$i)
        MsgBox(0,"子进程","发送消息"&$vParameter)
        Next
        exit
EndFunc

[ 本帖最后由 palkiller 于 2008-9-28 12:40 编辑 ]

palkiller 发表于 2008-9-27 12:10:04

麻烦用过CoProc.au3函数的大大帮忙解答一下...:face (32):

liongodmien 发表于 2008-9-27 17:56:49

一个AU3脚本程序能同时运行几个进程?!

palkiller 发表于 2008-9-27 21:13:38

原帖由 liongodmien 于 2008-9-27 17:56 发表 http://www.autoitx.com/images/common/back.gif
一个AU3脚本程序能同时运行几个进程?!

CoProc.au3这个UDF函数可以实现,我现在的问题是从子进程发送字符给父进程的时候一直失败...郁闷...

liongodmien 发表于 2008-9-28 10:33:08

原帖由 palkiller 于 2008-9-27 21:13 发表 http://www.autoitx.com/images/common/back.gif


CoProc.au3这个UDF函数可以实现,我现在的问题是从子进程发送字符给父进程的时候一直失败...郁闷...

一直以来Autoit都不支持多线程,因此一些需要同时运行多个循环的操作也就无法实现。这个问题在其它的某些语言里也经常出现,解决的方法就是使用多进程。

所谓多进程,就是同时运行多个子进程,每个子进程负责不同的操作,藉此达到和多线程相当的效果。Autoit本身已经具备了实现多进程的条件,且已经有人完成了相关的自定义函数。下面我将具体讲解如何利用这些自定义函数实现多进程。

首先到http://www.autoitscript.com/forum/index.php?showtopic=29326&hl=CoProc下载CoProc.zip,压缩包里的CoProc.au3包含了实现多进程的相关函数,你可以把这个文件复制到Include目录下。

http://www.xlan.cn/blog/article.asp?id=108

palkiller 发表于 2008-9-28 10:43:13

原帖由 liongodmien 于 2008-9-28 10:33 发表 http://www.autoitx.com/images/common/back.gif


一直以来Autoit都不支持多线程,因此一些需要同时运行多个循环的操作也就无法实现。这个问题在其它的某些语言里也经常出现,解决的方法就是使用多进程。

所谓多进程,就是同时运行多个子进程,每个子进程负责 ...

LS的兄弟...拜托...请看清我的问题...我现在就是用的这个UDF函数在做多进程...汗...

liongodmien 发表于 2008-9-28 11:01:11

刚才试了下竟然CoProc.au3内部就已经有错误了

sanhen 发表于 2008-9-28 11:58:45

回复 7# liongodmien 的帖子

提示内部错误是因为新版去掉了"RunErrorsFatal",装UDF中的
$iOldRunErrorsFatal = Opt("RunErrorsFatal", 0)
Opt("RunErrorsFatal", $iOldRunErrorsFatal)
删除即可。

sanhen 发表于 2008-9-28 12:00:34

我用3.2.13.7 测试结果同样返回False,你尝试用旧版测试一下以下例子:


#include "coproc.au3"

$iPidChild = _CoProc(Default, "_recv") ; Create new Procces, Set _recv() as Reciever function
Sleep(2000) ; Give some time to load new Process
$test=_CoProcSend($iPidChild,"Something..."); Send a Message to new process
MsgBox(0,"test",$test)
Func _recv($vParm)
    MsgBox(0,"Recieved",$vParm)
EndFunc

sanhen 发表于 2008-9-28 12:17:21

用3.2.9.3.1版测试成功。。。换旧版吧。用新版的话,UDF要更新了。

palkiller 发表于 2008-9-28 12:40:10

收到...谢谢三恨大大...结贴了先...:face (31):

sanhen 发表于 2008-9-28 12:41:01

已修正,在3.2.13.7版测试成功。

http://www.autoitx.com/forum.php?mod=viewthread&tid=2900&page=1&extra=page%3D1

palkiller 发表于 2008-9-28 12:55:03

原帖由 sanhen 于 2008-9-28 12:41 发表 http://www.autoitx.com/images/common/back.gif
已修正,在3.2.13.7版测试成功。

http://www.autoitx.com/forum.php?mod=viewthread&tid=2900&page=1&extra=page%3D1

收到...俺马上down来试试看...3Q very much...

marcushe 发表于 2008-9-28 12:55:52

给发贴人的建议

你用CoProc中的function报错, 那么你可以调试这个function,在 CoProc.au3中加入简单的调试语句----比如:在recever中不同位置加上msgbox,你就知道它为什么运行达不到效果了.
页: [1]
查看完整版本: 奇怪,为何子进程send信息给父进程一直flase?