按键精灵多线程教程问题

课程目录:1.初识按键精灵2.标识符和关键字3.变量4.变量的作用域5.常量6.数据类型7.强制转换类型8.运算符与表达式19.运算符与表达式210.运算符优先级11.键盘命令12.鼠标移动13.鼠标单击14.获取鼠标位置15.得到鼠标特征码16.如果命令17.如果否则语句18.颜色判断语句19.条件选择语句20.For循环语句21.DoLoop循环语句22.WhileWend循环语句23.跳转语句和中断命令24.子程序25.参数的真正意义与使用技巧26.函数27.数组28.随机数29.冒泡算法30.多维数组31.传递数组参数32.找色33.找图34.查找窗口句柄35.遍历窗口句柄36.得到当前窗口句柄37.自动补血38.后台插件39.颜色插件40.多点找色41.颜色增强插件42.读写配置文件43.读写记事本44.读取指定行内容45.删除指定行内容46.替换指定行内容47.未尾写入行内容48.办公文档插件49.获取系统运行时间50.设置剪贴板内容51.信息提示插件52.多媒体插件53.命令库54.多线程55.停止线程56.全局变量和环境变量57.全局变量与数组使用注意事项58.事件子程序59.窗体60.标签和输入框61.按钮62.计时器63.单选框和多选框64.组合框和图像65.下拉框和容器66.选项卡67.用户自定义68.下拉框69.定时器和列表框70.热键和浏览框71.网页按键精灵72.数学函数73.查找字符串74.联接字符串75.左边取字符76.比较字符串77.数组函数78.获取时间间隔79.添加时间间隔80.小时分秒81.其他函数82.注册大漠插件83.注册收费功能84.办理大漠会员85.免注册调用大漠86.修改大漠对象名防检测87.改对象名后再次注册大漠失败88.大漠找图89.透明图的制作与使用90.大漠找色91.大漠找字92.利用系统字库识别文字93.多色字库解决方案94.如何判定游戏后台模式195.如何判定游戏后台模式296.大漠综合工具详解97.后台单开脚本框架模板98.单开主体框架设计99.获取窗口句柄100.主窗口绑定101.任务线程102.线程内交互信息103.检测线程104.窗口解绑105.后台无限多开脚本框架106.多开主体框架设计107.多开获取窗口句柄108.解决所需大漠对象109.多开主窗口绑定1109.多开主窗口绑定2110. 多开保存信息111.多开任务线程112.多开检测线程113.多开单停处理114.多开恢复标题和解绑115.删除解绑信息116.全部停止117.多开综合调试118.通过DebugView窥探线程秘密119.同步器原理120.同步器框架设计121.界面设计122.同步端框架设计123.获取模式124.等待同步操作125.键盘线程126.异步防检测127.鼠标线程128.鼠标操控129.停止脚本处理
本文转载自:http://www.pan361.com/thread-.html
阅读(...) 评论()你的位置:
学习多线程的体会总结,探讨线程传参数问题
17:22:57 |
来源: 按键精灵资源站
声明:以下代码的运行环境为9.51.11790版,若为其他版本可能运行结果与本文不一致。多线程涉及的命令有BeginThreadDimEnvStopThreadPauseThreadContinueThread 使用多线程的时候,都必须先定义一个过程,在启动线程的时候,让线程执行该过程。示例代码如下:threadId = BeginThread(testThread)TracePrint &线程ID为& & threadIdSub testThread()& & TracePrint&启动了线程&End Sub上面的代码是一个最简单启动线程代码,BeginThread函数返回线程ID。程序输出如下: StopThread(线程ID)& &//停止线程PauseThread(线程ID)&&//暂停线程ContinueThread(线程ID)& &//继续运行线程。使用ContinueThread的前提是此线程必须未停止,且已使用PauseThread暂停 子线程内部是无法访问主线程的全局变量的,但可以访问和修改主线程中使用DimEnv命令定义的环境变量。看如下代码:globalVar = &globalVar&DimEnv globalEnvglobalEnv = &globalEnv&threadId = BeginThread(testThread)TracePrint &主线程ID为& & threadIdTracePrint &主线程暂停0.3秒&Delay 300TracePrint &主线程输出全局变量& & globalVarTracePrint &主线程输出环境变量&&&& globalEnv Sub testThread()TracePrint&子线程里输出全局变量& & globalVarTracePrint&子线程里输出环境变量& & globalEnvglobalVar= &我郁你个闷& //这行语句实际上定义了testThread过程的局部变量globalEnv= &我顶你个肺&End Sub 以上代码定义了一个过程testThread,一个全局变量globalVar以及环境变量globalEnv。启动线程后马上把主线程暂停0.3秒(为保证CPU有足够的时间片切换至线程testThread并执行完毕),在线程testThread内输出globalVar和globalEnv的值,随后修改他们的值。主线程继续执行并输出globalVar和globalEnv的值。调试窗口输出如下:
& &//可见环境变量值被子线程修改了 从上面的内容可看出线程内部无法访问和修改全局变量,但可以访问和修改环境变量。并且子线程内部不允许定义环境变量。 网上有很多文章都持这样的观点:“Q的多线程无法像函数,普通过程调用一样传参,要实现参数传递的效果就必须使用环境变量“。也许这些文章是很久以前发表的,早期版本的按键可能确实是这样的,但我对这个观点不苟同。到底启用线程时能否像普通过程调用一样传参呢,让事实说话吧。请看下面的程序://声明:以下代码的运行环境为9.51.11790版,若为其他版本可能运行结果与本文不一致。const& &arg2 = &参数2&& && &//arg2为常量arg3 = &你看,传过去了& //arg3为变量threadId =BeginThread(&&testThread(&&&参数1&,&&arg2 ,&&arg3&&)
)&&//启动线程时,给线程入口程序传入三实参Sub testThread(&&arg1 , arg2 ,arg3&&)& && & //给过程定义三形参& & TracePrint &线程里输出arg1:& & arg1& & TracePrint &线程里输出arg2:& & arg2& & TracePrint &线程里输出arg3:& & arg3End Sub程序输出如下:脚本多线程.Q ,第83行:线程里输出arg2: 可以看出,启动线程不是不可以传参数,假如实参为立即数(汇编术语)则能被传到线程,而常量变量标识符所对应的数值却不能传到线程。以上的结论虽没什么实用意义,大多数实参都是经过计算得出并保存在变量中的,以立即数作为实参的情况相对来说非常少,故多数人持前文中提到的观点并不奇怪。我只是由于JAVA和C语言的经验作祟,故意用程序验证一下,于是得出上面拨一点儿乱反一点儿正之说,权当谈资。 总结一下本文的知识点:1. BeginThread实际上是新开线程,并为该线程指定代码入口地址,而线程所执行的代码段是由一个Sub来定义的。2. 子线程内部是无法访问主线程的全局变量的,但可以访问和修改主线程中使用DimEnv命令定义的环境变量。由于线程跑的是SUB,SUB没有返回值,故可用环境变量充当返回值。3. 定义环境变量时不能同时给他赋值,定义环境变量和为环境变量赋值必须分两行写,否则会有语法错误提示。4. 子线程内部不允许定义环境变量。5. 启动线程不是不可以传参数,假如实参为立即数(汇编术语)则能被传到线程,而常量变量标识符所对应的数值却不能传到线程你的位置:
求助 大漠多线程问题
22:35:26 |
来源: 按键精灵资源站
Set dm = createobject(&dm.dmsoft&)
TracePrint dm.Ver()
DimEnv hwnd& & // 必须用DimEnv& &不能用dim& &&&否则子线程绑定提示&无效句柄&
hwnd = dm.GetMousePointWindow()
// 主绑定一定要先绑定,后启动线程
dm_ret = dm.BindWindow(hwnd,&dx&,&dx&,&dx&,0)
TracePrint dm_ret
// 开启3个线程,这个之前必须先绑定窗口模式
BeginThread 线程函数()
BeginThread 线程函数()
BeginThread 线程函数()
& &// 这里做主线程的事情
& &Delay 1000
Sub OnScriptExit()
& & // 这句只会在主线程结束时被调用到
& & dm_ret = dm.UnBindWindow()
Sub 线程函数()
& & Set dm = createobject(&dm.dmsoft&)
& & dm_ret = dm.BindWindow(hwnd,&dx&,&dx&,&dx&,0)
& & TracePrint &线程绑定结果:&&dm_ret
& && &&&// 这里做线程里需要做的事情
& && &&&Delay 1000
1.Sub OnScriptExit()
& & // 这句只会在主线程结束时被调用到
& & dm_ret = dm.UnBindWindow()
End Sub这句解绑是解绑主线程吧& &主线程解了& &副线程就失效& & 对么?
2.&&每个线程里面都要设置一次图片;字库路径么?&&还是只需要在主绑定之前设置一次就行了,子线程不用设置?
3.多线程有事会抢键鼠出错& &如补血和喊话同时进行的时候,不能补血,快捷键按到输入窗里面去了,
在喊话的时候,能先停止补血命令再进行喊话么?& &这个就得在子线程中 暂停 另一个子线程& & 不知道这样能行不.听说不行.
如果在主线程中设置这个功能该怎么设置?能做到么?
求各位大神指点& &感激不尽按键精灵教程:解决多线程资源冲突_百度经验
&&&&&&电脑按键精灵教程:解决多线程资源冲突听语音
百度经验:jingyan.baidu.com按键精灵教程:解决多线程资源冲突百度经验:jingyan.baidu.com按键精灵2014百度经验:jingyan.baidu.com1故事就从一位童鞋的悲惨经历说起吧。那是一个雷雨交加的夜晚这位童鞋熬夜写了一个关于《赤月传说》交易功能的多线程多开脚本。狂喜之余立马投身测试测试的结果却让他的脸变成了屎色他开了15个窗口,挂了半小时,就有10个窗口崩溃了。2他首先想到的是,会不会是电脑不给力,线程开多了导致的崩溃?于是,他只开了5个窗口啊~5个窗口崩了3个这个问题困扰了他一个月,后来才发现!原来,游戏里规定,交易只能是一对一的他没有在脚本中做处理于是,启动脚本之后,所有的号都争着和交易号进行交易,只有一个窗口抢到了和交易号交易的机会,其它的窗口没有抢到,就不断循环判断导致窗口崩溃就像10个人争抢一个茅坑一样,1个人抢到了,其余9个人都掉坑里了……3怎么才能让他们好好排队上厕所呢?很多童鞋可能会立马想到互斥体。将交易的那段代码用互斥体保护起来,当一个线程在执行交易代码时,其它的线程就无法进行交易操作。为了方便大家学习和使用,我们的06老湿提供了一段Api创建互斥体的代码范例~&4API函数要用到三个Api函数:CreateMutexWaitForSingleObjectReleaseMutex5步骤调用Api函数:CreateMutex函数创建一个新的互斥体,并且将创建之后返回的互斥体句柄赋值给环境变量:交易2、交易代码执行之前,调用Api函数:WaitForSingleObject函数,&设置互斥体使用时长为30秒。(如果一个交易操作需要3分钟,则这里的使用时长设置为大于等于30分钟。)&&&当第一条线程执行到&WaitForSingleObject函数时,会获取30秒的互斥体使用时长,在这30秒时间内,只有第一条&&&&&&&&&&线程可以执行被互斥体保护起来的代码段,其它的线程都在等待。1、3、交易代码执行之后,调用Api函数:ReleaseMutex函数,&释放互斥体使用权&&&当30秒时间过后,第一条线程会释放对互斥体的控制权,让给下一条线程使用。&6代码Declare&Function&CreateMutex&Lib&&kernel32&&Alias&&CreateMutexA&&(lpMutexAttributes&As&Long&,&ByVal&bInitialOwner&As&Long,&ByVal&lpName&As&String)&As&LongDeclare&Function&ReleaseMutex&Lib&&kernel32&&Alias&&ReleaseMutex&&(ByVal&hMutex&As&Long)Declare&Function&WaitForSingleObject&Lib&&kernel32&&Alias&&WaitForSingleObject&&(ByVal&hHandle&As&Long,&ByVal&dwMilliseconds&As&Long)&As&Long'Declare&Function&CloseHandle&lib&&kernel32&&(hdr&as&long)&as&Long&Dimenv&交易交易&=&创建互斥体()&For&10&&&&BeginThread&&游戏交易Next&Sub&游戏交易()&&&&//绑定窗口&&&&//登录帐号&&&&//寻找npc&&&&Call&锁定(交易,&30000)&&&&//交易&&&&Call&解锁(交易)End&Sub&Function&创建互斥体()&&&&'/*随机生成互斥体名称&&&&Dim&TempStr,&i&&&&TempStr&=&&anjian_mutex_&&&&&For&i&=&0&To&12&&&&&&&&Randomize&&&&&&&&TempStr&=&TempStr&&&Chr((24&*&Rnd)&+&65)&&&&Next&&&&'*/&&&&&&&&创建互斥体&=&CreateMutex(0,&true,&TempStr)End&Function&Sub&关闭互斥体(hdr)&&&&Call&CloseHandle(hdr)End&Sub&Function&锁定(Hdr,&Max)&&&&锁定&=&WaitForSingleObject(Hdr,&Max)End&Function&Function&解锁(Hdr)&&&&Call&ReleaseMutex(Hdr)End&Function&/*Sub&OnScriptExit()&&&TracePrint&&关闭互斥体&&&&Call&关闭互斥体(交易)End&Sub'*/ &7注意1:本例子中,在创建互斥体时,使用了随机产生互斥体的名称随机名称是以&“anjian_mutex_”开头并且加上12个随机字母随机名称这样复杂是为了避免名称冲突,如果有一样的名称存在,那么当前的互斥体就会创建失败8注意2:代码中还有一个CloseHandle函数,被注释掉了因为,我们的主线程结束得比其它的十条线程快,所以当十条线程还在创建启动的过程中,主线程就已经结束,并且触发了脚本停止事件,执行了关闭互斥体的命令这样会导致,刚创建的互斥体被关闭的情况所以,如果主线程结束得比其他线程快,就不要使用关闭互斥体命令了互斥体所占用的内存空间并不大,不关闭也不影响9那么,如果游戏规定,&登录帐号和交易&这两个操作都只能一个一个进行操作呢?那么我们就需要设置两个互斥体:登录互斥体&和&交易互斥体&&代码:Declare&Function&CreateMutex&Lib&&kernel32&&Alias&&CreateMutexA&&(lpMutexAttributes&As&Long&,&ByVal&bInitialOwner&As&Long,&ByVal&lpName&As&String)&As&LongDeclare&Function&ReleaseMutex&Lib&&kernel32&&Alias&&ReleaseMutex&&(ByVal&hMutex&As&Long)Declare&Function&WaitForSingleObject&Lib&&kernel32&&Alias&&WaitForSingleObject&&(ByVal&hHandle&As&Long,&ByVal&dwMilliseconds&As&Long)&As&Long'Declare&Function&CloseHandle&lib&&kernel32&&(hdr&as&long)&as&Long&Dimenv&交易,登录登录&=&创建互斥体()交易&=&创建互斥体()&For&10&&&&BeginThread&&游戏交易Next&Sub&游戏交易()&&&&&//绑定窗口&&&&&&&&&&&Call&锁定(登录,&30000)&&&&//登录帐号&&&&Call&解锁(登录)&&&&&&&&//寻找npc&&&&&&&&&Call&锁定(交易,&30000)&&&&//交易&&&&Call&解锁(交易)End&Sub&Function&创建互斥体()&&&&'/*随机生成互斥体名称&&&&Dim&TempStr,&i&&&&TempStr&=&&anjian_mutex_&&&&&For&i&=&0&To&12&&&&&&&&Randomize&&&&&&&&TempStr&=&TempStr&&&Chr((24&*&Rnd)&+&65)&&&&Next&&&&'*/&&&&&&&&创建互斥体&=&CreateMutex(0,&true,&TempStr)End&Function&Sub&关闭互斥体(hdr)&&&&Call&CloseHandle(hdr)End&Sub&Function&锁定(Hdr,&Max)&&&&锁定&=&WaitForSingleObject(Hdr,&Max)End&Function&Function&解锁(Hdr)&&&&Call&ReleaseMutex(Hdr)End&Function&/*Sub&OnScriptExit()&&&TracePrint&&关闭互斥体&&span&style=&font-size:&14.4&&Call&关闭互斥体(登录)&/span&&&&Call&关闭互斥体(交易)End&Sub'*/&&END经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(1)已投票(1)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验814012热门杂志第1期你不知道的iPad技巧3837次分享第1期win7电脑那些事6679次分享第2期新人玩转百度经验1431次分享第1期Win8.1实用小技巧2670次分享第1期小白装大神1965次分享◆请扫描分享到朋友圈按键精灵教程:解决多线程资源冲突_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
按键精灵教程:解决多线程资源冲突
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩4页未读,
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 手机按键精灵免root 的文章

 

随机推荐