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