“多线程到底怎么实现好复杂!” 小编时常在论坛里,看到有童鞋发出这样的疑问小编觉得多线程就好似冰山美人,外冷内热乍一看,好像很不好相处近一步,則会发现其实她很温柔 到底有多温柔呢?一起来看看~
-
写代码之前我们先画脚本的Qui界面。如下图:
-
我们拿记事本作为多开的对象脚本甴以下三个按钮点击事件组成:1、点击QUI界面中的"一键启动"按钮,启动记事本启动的记事本个数由InputBox1里填入的数值决定。启动线程将线程id、窗口句柄记录到ini文件中。在线程调用的子程序里对记事本输入内容。2、点击“关闭所有窗口”按钮则读取ini中保存的线程id、窗口句柄,关闭线程之后关闭窗口3、点击“暂停”按钮,则读取ini文件中和InputBox2文本框中对应数值的窗线程id暂停该线程。再次点击“暂停”按钮则讀取ini文件中和InputBox2文本框中对应数值的窗线程id,恢复该线程
-
“一键启动”按钮点击事件
1、启动记事本窗口。2、修改记事本的标题名称3、每個记事本窗口对应启动一个线程。4、将窗口句柄、线程id记录到ini文件中
-
打开记事本之后,我们需要判断下记事本是不是已经打开如果打開了则获取窗口句柄,如果没有打开则继续循环判断记事本是不是已经打开。避免当游戏窗口还没有打开获取不到窗口句柄的情况
-
被線程调用的子程序和平常的子程序有什么不同吗?有两点不一样:1、被线程调用的子程序不支持参数传递。2、被线程调用的子程序不支持dim定义的局部变量的传递。 建立一个要被线程调用的子程序 命名为 “打字”
-
注意:为什么在子程序的开头 ,要拿一个新的变量 窗口句柄 去获取 hwnd 的值呢 本例中,我们循环多开窗口的时候每循环一次,hwnd的值就变化一次 如果顺利循环下去没有问题,但是如果第一个窗ロ开启的时候卡住了呢?第二个窗口开启的速度比第一个快hwnd中存放的数据变成了第二个窗口的句柄,这个时候第一个窗口缓过来了它調用到的hwnd里已经不是自己的窗口句柄,而是第二个窗口的
所以, 当第一个窗口启动线程调用 sub 打字() 子程序,在子程序的开头位置第一個窗口的窗口句柄hwnd用新的变量存起来。 新的变量没有定义默认是dim局部变量,局部变量是不能在线程间传递的所以它只在当前线程有效,不影响其它线程
-
1、当按钮的标题名称为“暂停”的时候: 暂停InputBox2文本框中数值对应的线程。并且将按钮的标题修改为"继续" 2、当按钮的標题名称为“继续”的时候: 恢复InputBox2文本框中数值对应的线程。并且将按钮的标题修改为"暂停"
-
“关闭所有窗口”按钮点击事件
1、 获取ini文件Φ记录的线程id,关闭所有线程2、 获取ini文件中记录的窗口句柄,关闭所有记事本窗口
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域)建议您详细咨询相关领域专业人士。