找回密码
 加入
搜索
查看: 19205|回复: 16

[AU3基础] 请教多线程或多进程实现独立运行

 火.. [复制链接]
发表于 2012-11-12 16:03:02 | 显示全部楼层 |阅读模式
写了一个计时器,想让GUI与计时器两个模块在不同的线程或进程里运行,防止GUI进程影响计时器的精确度,代码如下,请各位高人指点迷津!!
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Date.au3>
;let the timecount program in a singel pro

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 200, @DesktopHeight*0.125*0.5,0,0,$WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
$Label1 = GUICtrlCreateLabel("00:00:00", 0, 0, 200, @DesktopHeight*0.125*0.5,$SS_CENTER,-1)
GUICtrlSetBkColor(-1,0x00ff00)
GUICtrlSetColor(-1,000000)
GUICtrlSetFont(-1, 32, 400, 0, "Arial Black")

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $SideBar,$timer, $Secs, $Mins, $Hour, $Time;set for pass time count
$timer = TimerInit() ;time count start here
While 1
        Timer()
WEnd
Func Timer()
        _TicksToTime(Int(TimerDiff($timer)),$Hour,$Mins, $Secs)
        Local $sTime = $Time 
        $Time = StringFormat("%02i:%02i:%02i",$Hour,$Mins, $Secs)
        If $sTime <> $Time Then ControlSetText("", "", "Static1", $Time)
EndFunc   ;==>Timer
发表于 2012-11-12 16:54:13 | 显示全部楼层
应该实现不了吧,就算实现得了也没有意义。
1)autoit3不支持多线程
2)多进程等于把一个脚本写成两个脚本,不大现实。
msdn上有一句话:Concurrent operations do not necessarily lead to better performance。除非那种需要等待的地方可以使用多线程,像你这用我觉得没有什么必要!
发表于 2012-11-12 17:20:33 | 显示全部楼层
本帖最后由 xiehuahere 于 2012-11-12 17:22 编辑

从我逛论坛来看,autoit是可以做到的。
只是我以前一直没用过,所以也不会,最近正好需要用到这种功能,关注下。
看了下论坛里“多进程ping”的例子,觉得用不上。
 楼主| 发表于 2012-11-12 17:57:00 | 显示全部楼层
回复 2# seeyou

前辈,请帮帮忙吧,不要多线程了,多进程也可以!!
 楼主| 发表于 2012-11-12 17:58:11 | 显示全部楼层
回复 3# xiehuahere


多进程ping的例子我看过,确实用不上,不过还是要多些你的支持。
发表于 2012-11-12 18:00:03 | 显示全部楼层
没看出要做成什么结果
 楼主| 发表于 2012-11-12 18:56:09 | 显示全部楼层
回复 6# afan


实现gui界面在一个进程里运行,计时部分在另外一个进程里运行
发表于 2012-11-12 19:06:03 | 显示全部楼层
回复 7# navy


   
msdn上有一句话:Concurrent operations do not necessarily lead to better performance。除非那种需要等待的地方可以使用多线程,像你这用我觉得没有什么必要! ...
seeyou 发表于 2012-11-12 16:54


正如 seeyou 所说,示例没有多*程的必要。
 楼主| 发表于 2012-11-12 20:02:54 | 显示全部楼层
回复 8# afan


首先感谢支持,此外我认为需不需要使用多*程和能不能实现多*程是两个问题,本人菜鸟,无意顶撞前辈。
发表于 2012-11-12 20:42:28 | 显示全部楼层
回复 9# navy


    我只是想提醒下有时候不需要舍近求远而已~

    就示例而言,如果仅需要达到“不影响计时器的精确度”有多种方法都可以实现,并不一定需要多*程,而多*程也不一定就是最理想的方式,再次引用“Concurrent operations do not necessarily lead to better performance”

    如果必须使用多进程,可以直接搜索论坛“多 程”,有不少实例。
发表于 2012-11-13 09:20:09 | 显示全部楼层
回复 10# afan

A大,我请教下,我那个应用是类似有道词典迷你窗口的查询界面,查询时是调用一个excel里的宏(别人做的)来实现,而这个宏是要连接服务器查询数据的,需要等待10s左右,这段时间内界面也需要响应用户操作,是否应该考虑多进程?
发表于 2012-11-13 11:23:08 | 显示全部楼层
回复 11# xiehuahere


    轻量型的动作一般用 _Timer_SetTimer 定时器调用执行就可以了,当然还要看程序如何组织。不行的话再考虑多进程吧,我也没研究过~
发表于 2012-11-16 21:45:00 | 显示全部楼层
回复 11# xiehuahere
我也遇到这个问题,正在考虑用多进程来实现,不过貌似多进程的话,变量不怎么好相互访问。
 楼主| 发表于 2012-11-17 18:47:28 | 显示全部楼层
回复 13# xms77

进程间的传递确实不好解决
发表于 2012-11-30 17:16:00 | 显示全部楼层
回复 13# xms77


_Timer_SetTimer 实现的可以传参吗?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 01:43 , Processed in 0.252757 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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