AU3多线程实例 GUI+MsgBox
MsgBox版本:$Timer = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$TimerDLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 5000, "ptr", DllCallbackGetPtr($Timer))
$Timer2 = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$Timer2DLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 8000, "ptr", DllCallbackGetPtr($Timer2))
$Timer3 = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$Timer3DLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 10000, "ptr", DllCallbackGetPtr($Timer3))
While 1
GUIGetMsg()
WEnd
Func Timer($hWnd, $uiMsg, $idEvent, $dwTime)
If $idEvent = $TimerDLL Then
MsgBox(0,"","线程1")
ElseIf $idEvent = $Timer2DLL Then
MsgBox(0,"","线程2")
ElseIf $idEvent = $Timer3DLL Then
MsgBox(0,"","线程3")
EndIf
EndFunc
GUI版本(较强大):
$Form1 = GUICreate("多线程实例", 272, 139, -1, -1)
$Label1 = GUICtrlCreateLabel("00:00:00:00", 8, 8, 146, 17)
$Label2 = GUICtrlCreateLabel("0", 8, 56, 150, 17)
$Label3 = GUICtrlCreateLabel("", 8, 104, 148, 17)
$Button1 = GUICtrlCreateButton("关闭线程1", 168, 8, 89, 25, 0)
$Button2 = GUICtrlCreateButton("关闭线程2", 168, 48, 89, 25, 0)
$Button3 = GUICtrlCreateButton("关闭线程3", 168, 96, 89, 25, 0)
GUISetState(@SW_SHOW)
Global $t2, $t3 = 1
$Timer = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$TimerDLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 1000, "ptr", DllCallbackGetPtr($Timer))
$Timer2 = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$Timer2DLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 200, "ptr", DllCallbackGetPtr($Timer2))
$Timer3 = DllCallbackRegister("Timer", "int", "hwnd;uint;uint;dword")
$Timer3DLL = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", 500, "ptr", DllCallbackGetPtr($Timer3))
While 1
Switch GUIGetMsg()
Case - 3
Exit
Case $Button1
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $TimerDLL)
DllCallbackFree($Timer)
Case $Button2
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $Timer2DLL)
DllCallbackFree($Timer2)
Case $Button3
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $Timer3DLL)
DllCallbackFree($Timer3)
EndSwitch
WEnd
Func Timer($hWnd, $uiMsg, $idEvent, $dwTime)
If $idEvent = $TimerDLL Then
GUICtrlSetData($Label1, @HOUR & ":" & @MIN & ":" & @SEC & ":" & @MSEC)
ElseIf $idEvent = $Timer2DLL Then
$t2 += 1
GUICtrlSetData($Label2, $t2)
ElseIf $idEvent = $Timer3DLL Then
$t3 *= 2
GUICtrlSetData($Label3, $t3)
EndIf
EndFunc
3.3.0.0版本正常运行 学习。。。。。。 Thanks
:face (14): 收下學習...
感謝您的分享 ^_^ 收藏了:face (34): 学习了!非常感谢! 拿下:face (34): 能不能讲解一下? 厉害,学习下
回复 8# 298311657 的帖子
汗,我觉得我的代码已经很简单了。。。实在不会就照抄算了。。。 代码确实很简单,一看就懂,但是是如何实现多线程的,却理解不了,所有希望能把原理讲解一下~ 看来看去我只看到3个通过settimer()函数set出来的3个计时器, 第一个例程set了还没kill呢....这和多线程有什么关系呢?
初学au3,不知道有没象CreateThread() / _beginthread()之类的创建多线程方法. 多进程模拟多线程