多线程与单线程的区别:

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

 

打包下载地址:

蓝奏云:https://wwp.lanzouj.com/iuRXE1x1r1ba   提取码:ahk6

123网盘:https://www.123pan.com/s/ufi3Td-o0O53.html   提取码:ahk6

 

代码片段:

/*
═════════════════════════════════════════════════════════════════
                        多进程共享函数、连锁关闭并通信

                    关联进程变量 := New ExecProcess("标签名称") 新建关联进程, 可传参
                    关联进程变量 := ""         清空这个 "关联进程变量" 来关闭对应的进程

     语法参考AHK_H对线程控制的用法,并新增相互通信和进程间互相控制的功能。支持编译运行
  新进程默认隐藏托盘图标和禁用热键来避免冲突,恢复热键和控制的方法类库说明里的 F3 和 F4
═════════════════════════════════════════════════════════════════
*/
#Include <ExecProcess>

; 受函数封闭性的影响,只能在脚本头部自行判断是否加载新进程,让新进程正常运行
if (A_Args[10]="演示新进程代码载入")
    Goto % A_Args[10]

Process1 := New ExecProcess("演示新进程代码载入", , , ,"value4") ; 带传参的开启新进程

Gosub 演示新进程代码载入 ; 复用共享标签和函数演示
Return

演示新进程代码载入:
Gui -MinimizeBox -MaximizeBox +AlwaysOnTop
Gui Add, Edit, w300 R2 v通信显示 g同步发送
Gui Show, % "x850 w330 y" (A_Args[4]="Value4"?500:400), % (A_Args[4]="Value4"?"F2新":"P主") "进程 - 互相通信同步演示,请输入文字"

Loop {
    Sleep 80
    MouseGetPos, x, y
    ToolTip % (A_Args[4]="Value4"?"F2-新":"P-主") "进程持续运算演示-" A_Index, x+10, y-(A_Args[4]="Value4"?30:70)
}
Return

同步发送:
GuiControlGet, 获取编辑框内容,, 通信显示
if (A_Args[4]="Value4")
    ExecPostFunction( , "Gui同步更新", 获取编辑框内容, "通信显示") ; 第一个参数留空或者填"Parent"是给主进程发送信息
  else
    ExecPostFunction("演示新进程代码载入", "Gui同步更新", 获取编辑框内容, "通信显示")
Return

Gui同步更新(Value, ControlID) {
    GuiControl,, %ControlID%, %Value%
}

GuiClose:
    ; if (A_Args[9]="")  ; 是新进程才触发
        ExitApp
Return


MyLabel:
    Menu Tray, Icon  ; 让新进程显示图标【新进程默认禁用热键以避免冲突】
    ; MsgBox, , , % "var变量值:" var, 1
Return

F1::
    ; ExecAssign("演示新进程代码载入", "var", "123456") ; 给新进程的变量赋值
    ExecLabel("演示新进程代码载入", "MyLabel") ; 让新进程跳转至指定标签
    if (onoff := !onoff)
        ExecPause("演示新进程代码载入") ; 暂停指定进程
     else
        ExecPause("演示新进程代码载入", "Off")
Return

; F2键做新进程的开、关、一键开关的演示【只有主进程端能够新建进程】
F2::
    ; Process1 := New ExecProcess("演示新进程代码载入") ; 不带传参的新建进程
    Process1 := ""
    ; ProcessOnOff:=(Toggle:=!Toggle) ? New ExecProcess("演示新进程代码载入",,,, "Value4") : ""
Return

 

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