找回密码
 加入
搜索
查看: 5490|回复: 11

如何[解决多进程模拟多线程]程序重复运行问题

[复制链接]
发表于 2008-10-17 09:20:33 | 显示全部楼层 |阅读模式
Autoit里用多进程模拟多线程
参考:http://www.autoitx.com/forum.php ... &extra=page%3D2
测试代码 如下:

[au3]
#include "CoProc.au3"


$g_szVersion = "Test"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)

_CoProc("Test_1")
_CoProc("Test_2")

Func Test_1()
While 1
MsgBox(0, '', "This is Test_1")
Sleep(5000)
Wend
EndFunc

Func Test_2()
While 1
MsgBox(0, '', "This is Test_2")
Sleep(5000)
Wend
EndFunc
[/au3]

结果是:
$g_szVersion = "Test"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)

无法正常工作,不会中止程序重复运行。

BTW:帖子编辑那里有au3脚本插入器,本想把这种au3代码用它粘贴到帖子中去,以便观看。但我无法正常使用它,现象是在编辑时点不动,字体、大小等一样点不动。不晓得是否权限问题?
已自行解决 贴au3脚本的问题。即 手动 输入"(au3)...代码(/au3)" 小括号改为中括号即可

[ 本帖最后由 caney 于 2008-10-17 14:34 编辑 ]
发表于 2008-10-17 09:48:06 | 显示全部楼层
没明白怎么是多进程!

那不是不能防止程序重复运行,是因为运行了两个进程,按AU3的默认,也就出了两个系统图标!
 楼主| 发表于 2008-10-17 09:52:06 | 显示全部楼层
原帖由 liongodmien 于 2008-10-17 09:48 发表
没明白怎么是多进程!

那不是不能防止程序重复运行,是因为运行了两个进程,按AU3的默认,也就出了两个系统图标!


是的,系统图标确实有二个。我的困惑在于:再次运行程序,就会再出现两个系统图标,加上原来的二个就有四个啦。

解决程序重复运行的意思是:判断是否已经运行了该程序,如是,结束再次运行的该程序。

也就是不是出现四个、六个。。。。系统图标。
 楼主| 发表于 2008-10-17 09:53:43 | 显示全部楼层
测试一下贴AU3码
[au3]
#include "CoProc.au3"


$g_szVersion = "Test"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)

_CoProc("Test_1")
_CoProc("Test_2")

Func Test_1()
While 1
MsgBox(0, '', "This is Test_1")
Sleep(5000)
Wend
EndFunc

Func Test_2()
While 1
MsgBox(0, '', "This is Test_2")
Sleep(5000)
Wend
EndFunc
[/au3]
发表于 2008-10-17 10:55:06 | 显示全部楼层
按下面的就可以了,是什么原因我希望LZ能自己想一想:

#include "CoProc.au3"


$g_szVersion = "Test_Check"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)

_CoProc("Test_1")
_CoProc("Test_2")

Do
        Sleep(90)
Until 0
Func Test_1()
While 1
MsgBox(0, '', "This is Test_1")
Sleep(5000)
Wend
EndFunc 

Func Test_2()
While 1
MsgBox(0, '', "This is Test_2")
Sleep(5000)
Wend
EndFunc
 楼主| 发表于 2008-10-17 13:56:10 | 显示全部楼层
原帖由 liongodmien 于 2008-10-17 10:55 发表
按下面的就可以了,是什么原因我希望LZ能自己想一想:
[au3]
......
Do
        Sleep(90)
Until 0
......
[/au3]


谢谢不吝赐教,对于兄弟这段代码:

[au3]
......
Do
        Sleep(90)
Until 0
......
[/au3]

虽不甚明了,但也有尝试。
结果是首次运行即有三个系统图标;重复运行,还是三个系统图标,没有变成四个或六个系统,已经很安慰。
总觉代码还是不怎么完善。
望兄弟提壶灌顶。。

[ 本帖最后由 caney 于 2008-10-17 13:57 编辑 ]
发表于 2008-10-17 14:19:31 | 显示全部楼层
既然不明白,那就不浪费兄弟你宝贵的时间了....

多进程产生的进程,不会因为主进程的退出而退出,这是你原来代码运行后会留下两个图标的原因....

接上,既然主进程已经退出了,那何来窗口标题的判断?!只会继续产生新的子进程...

我加了一个死循环后,主进程就保留了下来,由于没有隐藏图标,于是就有了三个图标了!也正因为主进程还在,那个窗口标题的判断就会产生其应有的效果!
 楼主| 发表于 2008-10-17 14:33:57 | 显示全部楼层
原帖由 liongodmien 于 2008-10-17 14:19 发表
既然不明白,那就不浪费兄弟你宝贵的时间了....

多进程产生的进程,不会因为主进程的退出而退出,这是你原来代码运行后会留下两个图标的原因....

接上,既然主进程已经退出了,那何来窗口标题的判断? ...


兄弟的解析深入浅出,令我茅塞顿开!~

再次谢谢兄弟的不耐心赐教!

本问题已解决~
发表于 2008-12-25 14:43:27 | 显示全部楼层
#include "CoProc.au3"
#include <GUIConstants.au3>

$g_szVersion = "多进程测试"
If WinExists($g_szVersion) Then Exit
AutoItWinSetTitle($g_szVersion)

_CoProc("Test_1")
_CoProc("Test_2")

;下面这个主循环是为了不让程序重复运行而写的,原因如下:
#cs
多进程产生的进程,不会因为主进程的退出而退出,这是代码运行后会留下两个图标的原因

既然主进程已经退出了,就不会有窗口标题的判断,只会继续产生新的子进程

加了一个死循环后,主进程就保留了下来,由于没有隐藏图标,于是就有了三个图标了

也正因为主进程还在,窗口标题的判断就会产生其应有的效果
#CE
While 1
        $msg = GuiGetMsg()
        Select
        Case $msg = $GUI_EVENT_CLOSE
                ExitLoop

        Case Else
                ;
        EndSelect
WEnd

Func Test_1()
        Local $IsQuit=0
        While 1
                $IsQuit=MsgBox(4097, '', "这是进程1产生的对话框"&@CRLF&@CRLF&"继续请按确定"&@CRLF&@CRLF&"退出请按取消")
                If $IsQuit==2 Then Return 1                ;如果用户不在对话框按下CANCEL键,就继续
                Sleep(1000)
        Wend
EndFunc

Func Test_2()
        Local $IsQuit=0
        While 1
                $IsQuit=MsgBox(4097, '', "这是进程2产生的对话框"&@CRLF&@CRLF&"继续请按确定"&@CRLF&@CRLF&"退出请按取消")
                If $IsQuit==2 Then Return 1                ;如果用户不在对话框按下CANCEL键,就继续
                Sleep(1000)
        Wend
EndFunc
发表于 2011-3-25 14:44:14 | 显示全部楼层
翻旧饭看看。
发表于 2011-5-23 21:40:51 | 显示全部楼层
欣赏元老的提点
发表于 2014-12-25 10:58:46 | 显示全部楼层
来学习学习
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-28 12:21 , Processed in 0.085099 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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