qqgghh1 发表于 2008-8-26 10:39:58

这个需求是否可以用多进程函数来实现。

向各位老大请教:
小弟想要实现以下功能:
开启主程序,点击某按钮运行某一进程,因中途可能需要终止该进程,点击另一控件或主程序上的关闭,结束那个正在运行的进程及主程序。
下面是小弟写的,但好像不能实现这个功能,也许是对多进程了解的太肤浅了,需要大哥们指点啊
#include<CoProc.au3>
While 1
$nMsg = GUIGetMsg()
$Msg= TrayGetMsg()
      Select
        Case $Msg = $displayitem
        GUISetState(@SW_RESTORE , $Form1)
         Case$Msg = $exititem
           _CoProc("Quit")
         Case $nMsg = $GUI_EVENT_CLOSE
           _CoProc("Quit")
          Case $nMsg = $Button1
           _CoProc("Update")
          EndSelect
WEnd
Func Update()
;程序主体

EndFunc
Func Quit()
If ProcessExists("Update.exe")Then
        ProcessClose("Update.exe")
        Exit
Else
        Exit
EndIf
EndFunc

[ 本帖最后由 qqgghh1 于 2008-11-10 13:40 编辑 ]

qqgghh1 发表于 2008-8-26 22:49:38

自己先顶。
下午看了几遍论坛里关于多进程的介绍,初步了解其用法。但还是有些不明白:
主程序中的变量在子进程中无法使用啊。运行时提示子进程中的变量(已在主程序中定义)未定义
高手赐教啊!

qqgghh1 发表于 2008-8-28 09:56:01

主程序中定义的全局变量子函数中可用,但另开子进程来调用子函数,变量就失效了.

继续顶.
请大哥们支招啊.

qqgghh1 发表于 2008-8-28 17:25:36

接着顶.需求达人

asdf 发表于 2008-8-28 20:32:25

没必要多进程模块。换个思路,很简单的事。

au3有个隐藏主窗口,它关闭时相关进程会自己关掉。

[ 本帖最后由 asdf 于 2008-8-28 20:34 编辑 ]

qqgghh1 发表于 2008-8-28 23:06:14

您是说@SW_HIDE吗?
但是单线程时,程序一直在运行,比如它在运行循环指令时,单进程下无法再发送命令终止主程序或您所说隐藏主窗口啊。

asdf 发表于 2008-8-29 09:45:36

= =看来你没懂我的意思,要关闭一个au3进程是件简单活,找到au3隐藏窗口(autoitwin,即是实际上的主窗口),winclose它,然后与之相关的au3进程就会关掉的了。

kakinkgb 发表于 2008-8-30 18:49:02

如果是新手不建议立刻做多进程,先熟悉一下au3自己的思路就清楚了

qqgghh1 发表于 2008-8-31 22:11:34

晕。还请告知。我只是想知道使用多进程时变量作用域的问题。

qqgghh1 发表于 2008-9-9 17:20:02

没有人关注了,还是自己来终结它吧.希望AU3的发展能更完美地支持GUI,支持多线程

qqgghh1 发表于 2008-9-9 17:20:02

没有人关注了,还是自己来终结它吧.希望AU3的发展能更完美地支持GUI,支持多线程

qqgghh1 发表于 2008-9-9 17:20:02

没有人关注了,还是自己来终结它吧.希望AU3的发展能更完美地支持GUI,支持多线程

shuren88 发表于 2012-2-29 20:35:19

很不错,已经实现,不过_CoProcSend()函数不起作用。必须到http://www.autoitscript.com/forum/index.php?app=core&module=attach&section=attach&attach_id=33753
下载新的CoProc.au3,覆盖Include中的文件

Posted 17 April 2011 - 09:38 AM

Here's CoProc.au3 with _CoProcSend and _DuplicateHandle fixed.
Attached Files
CoProc.au3   23.6K   159 downloads
页: [1]
查看完整版本: 这个需求是否可以用多进程函数来实现。