找回密码
 加入
搜索
查看: 4001|回复: 13

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

[复制链接]
发表于 2008-9-26 22:42:28 | 显示全部楼层 |阅读模式
#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 编辑 ]
 楼主| 发表于 2008-9-27 12:10:04 | 显示全部楼层
麻烦用过CoProc.au3函数的大大帮忙解答一下...
发表于 2008-9-27 17:56:49 | 显示全部楼层
一个AU3脚本程序能同时运行几个进程?!
 楼主| 发表于 2008-9-27 21:13:38 | 显示全部楼层
原帖由 liongodmien 于 2008-9-27 17:56 发表
一个AU3脚本程序能同时运行几个进程?!


CoProc.au3这个UDF函数可以实现,我现在的问题是从子进程发送字符给父进程的时候一直失败...郁闷...
发表于 2008-9-28 10:33:08 | 显示全部楼层
原帖由 palkiller 于 2008-9-27 21:13 发表


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


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

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

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

http://www.xlan.cn/blog/article.asp?id=108
 楼主| 发表于 2008-9-28 10:43:13 | 显示全部楼层
原帖由 liongodmien 于 2008-9-28 10:33 发表


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

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


LS的兄弟...拜托...请看清我的问题...我现在就是用的这个UDF函数在做多进程...汗...
发表于 2008-9-28 11:01:11 | 显示全部楼层
刚才试了下竟然CoProc.au3内部就已经有错误了
发表于 2008-9-28 11:58:45 | 显示全部楼层

回复 7# liongodmien 的帖子

提示内部错误是因为新版去掉了"RunErrorsFatal",装UDF中的
$iOldRunErrorsFatal = Opt("RunErrorsFatal", 0)
Opt("RunErrorsFatal", $iOldRunErrorsFatal)
删除即可。
发表于 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

发表于 2008-9-28 12:17:21 | 显示全部楼层
用3.2.9.3.1版测试成功。。。换旧版吧。用新版的话,UDF要更新了。
 楼主| 发表于 2008-9-28 12:40:10 | 显示全部楼层
收到...谢谢三恨大大...结贴了先...
发表于 2008-9-28 12:41:01 | 显示全部楼层
已修正,在3.2.13.7版测试成功。

http://www.autoitx.com/forum.php ... &extra=page%3D1
 楼主| 发表于 2008-9-28 12:55:03 | 显示全部楼层
原帖由 sanhen 于 2008-9-28 12:41 发表
已修正,在3.2.13.7版测试成功。

http://www.autoitx.com/forum.php ... &extra=page%3D1


收到...俺马上down来试试看...3Q very much...
发表于 2008-9-28 12:55:52 | 显示全部楼层

给发贴人的建议

你用CoProc中的function报错, 那么你可以调试这个function,在 CoProc.au3中加入简单的调试语句----比如:在recever中不同位置加上msgbox,你就知道它为什么运行达不到效果了.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-5 02:10 , Processed in 0.084973 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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