navy 发表于 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

seeyou 发表于 2012-11-12 16:54:13

应该实现不了吧,就算实现得了也没有意义。
1)autoit3不支持多线程
2)多进程等于把一个脚本写成两个脚本,不大现实。
msdn上有一句话:Concurrent operations do not necessarily lead to better performance。除非那种需要等待的地方可以使用多线程,像你这用我觉得没有什么必要!

xiehuahere 发表于 2012-11-12 17:20:33

本帖最后由 xiehuahere 于 2012-11-12 17:22 编辑

从我逛论坛来看,autoit是可以做到的。
只是我以前一直没用过,所以也不会,最近正好需要用到这种功能,关注下。
看了下论坛里“多进程ping”的例子,觉得用不上。

navy 发表于 2012-11-12 17:57:00

回复 2# seeyou

前辈,请帮帮忙吧,不要多线程了,多进程也可以!!

navy 发表于 2012-11-12 17:58:11

回复 3# xiehuahere


多进程ping的例子我看过,确实用不上,不过还是要多些你的支持。

afan 发表于 2012-11-12 18:00:03

没看出要做成什么结果

navy 发表于 2012-11-12 18:56:09

回复 6# afan


实现gui界面在一个进程里运行,计时部分在另外一个进程里运行

afan 发表于 2012-11-12 19:06:03

回复 7# navy


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

正如 seeyou 所说,示例没有多*程的必要。

navy 发表于 2012-11-12 20:02:54

回复 8# afan


首先感谢支持,此外我认为需不需要使用多*程和能不能实现多*程是两个问题,本人菜鸟,无意顶撞前辈。

afan 发表于 2012-11-12 20:42:28

回复 9# navy


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

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

    如果必须使用多进程,可以直接搜索论坛“多 程”,有不少实例。

xiehuahere 发表于 2012-11-13 09:20:09

回复 10# afan

A大,我请教下,我那个应用是类似有道词典迷你窗口的查询界面,查询时是调用一个excel里的宏(别人做的)来实现,而这个宏是要连接服务器查询数据的,需要等待10s左右,这段时间内界面也需要响应用户操作,是否应该考虑多进程?

afan 发表于 2012-11-13 11:23:08

回复 11# xiehuahere


    轻量型的动作一般用 _Timer_SetTimer 定时器调用执行就可以了,当然还要看程序如何组织。不行的话再考虑多进程吧,我也没研究过~

xms77 发表于 2012-11-16 21:45:00

回复 11# xiehuahere
我也遇到这个问题,正在考虑用多进程来实现,不过貌似多进程的话,变量不怎么好相互访问。

navy 发表于 2012-11-17 18:47:28

回复 13# xms77

进程间的传递确实不好解决

xiehuahere 发表于 2012-11-30 17:16:00

回复 13# xms77


_Timer_SetTimer 实现的可以传参吗?
页: [1] 2
查看完整版本: 请教多线程或多进程实现独立运行