多线程与单线程的区别:

单线程顺序执行:ABCDEFG,HIJKLMN
单线程异步执行:ABC,KLMN,EFGHI,错开执行避免I/O之类的长时间等待卡住线程【WinWait】
多线程:一个进程内可有多个线程ABCDEFG同时执行互不干扰
多进程:创建多个进程ABCDEFG并互相通信,来达到仿多线程的效果。

 

AHK_L版调用H版dll实现多线程函数.zip

代码片段:

 /*
═══════════════════════════════════════════════════════════

                                        AHK_L版调用H版dll实现多线程方法

    详见H版帮助文档:https://hotkeyit.github.io/v1/docs/commands/AhkThread.htm
    以下为简单演示:
      ahk.textdll(代码内容, 线程编号, 可传参) ; 开启一个新线程
      ahk.Terminate(线程编号) ; 结束指定线程 【ahk.textdll("", 1)也可结束】
    更多比如线程重启、暂停、在线状态,调用线程中的函数,给线程的变量赋值,检查
    线程中变量的值,指定线程跳转标签等解释请查看Lib\AhkLThread.ahk

═══════════════════════════════════════════════════════════
*/
#Include <AhkLThread>

; 以下为创建新线程多行写法
s=
(` %
; #NoTrayIcon ; 关闭新线程托盘图标显示
Loop {
    Sleep 10
    MouseGetPos, x, y
    ToolTip % A_Args[1] A_Index, x+10, y-70
}
Return

MyFunc(可传参, 可传参2) {
    MsgBox, , 1号线程对话框, % "传参1内容为:" 可传参 "`n传参2内容为:" 可传参2
}

标签1:
MsgBox, , 1号线程对话框,  仅标签跳转演示`n`nF4给线程赋值:%var%
Return
)
ahk.textdll(s, 1, "传参:1号线程持续运算-")

; 以下为创建新线程单行写法
ahk.textdll("Loop {`nSleep 10`nMouseGetPos, x, y`nToolTip % A_Args[1] A_Index, x+10, y-30`n}", 2, "传参:2号线程持续运算-")

; 调用外部脚本文件的写法
; ahk.dll("外部脚本文件名.ahk", 3, "传参运行线程333")

MsgBox, , 主进程对话框, 点击确定后主进程将结束,`n`n连带所有新线程也会跟着结束。
ExitApp

; F1:对1号线程暂停/开启的切换
F1::
if (onoff := !onoff)
    ahk.Pause(1)
  else
    ahk.Pause(1, "Off")
Return

; F2:在1号线程里进行传参并调用函数【归属于1号线程】
F2::ahk.PostFunction(1, "MyFunc", "Hello World!", "第二个参数")

 ; F3:在1号线程里跳转标签运行【归属于1号线程】
F3::ahk.Label(1, "标签1", 1) ; 仅跳转不赋值

F4::
ahk.Assign(1, "var", "123456") ; 给1号线程的"var"变量赋值
MsgBox, , 主进程对话框, % "给1号线程的 var 变量赋值为:" ahk.Getvar(1, "var") ; 主进程查看1号线程的变量内容
Return

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。