TC官方合作论坛

标题: 【基础篇】9、2013线程的使用及巧妙设计 [打印本页]

作者: 龍吟达人    时间: 2012-10-31 11:28
标题: 【基础篇】9、2013线程的使用及巧妙设计
   在我们学习写脚本的时候必然就离不开线程,因为我们写脚本的目的大部分都是源于替代手工重复的动作,而这些动作会显得比较轻松不会太复杂。那么由于它是一个重复的动作,所以它离不开循环语句的使用,而循环语句的使用又离不开线程,那么我们这一章就学习线程的使用,因为它就是循环语句的开关,有了这个开关我们就可以随时对循环语句进行关闭或者打开,这样就不会造成脚本被关闭了程序还在运行或者游戏奔溃等问题的出现。

  根据上面的介绍,我们可以知道线程用于启动循环的开始和结束,那么我们需要考虑到启动和停止,假如你写的脚本是一个前台的脚本,它完成的是无限循环的为你查看游戏中拍卖的价格,直到价格低于你设置的价格的时候就报警的功能。这个时候如果我们用一个按钮来停止脚本,那么就显得不可行,因为鼠标它一直在为你工作,你现在需要用鼠标去点击停止脚本,肯定会出现当你移动到脚本的停止热键的瞬间鼠标就被很快的移动到了你正在扫物品的地方去了,所以我们考虑到这点,涉及到了前台的脚本我们需要采用热键来启动和停止。那么在这章中,我将教会大家如何使用热键来启动和停止脚本。


第一步、首先我们在TC软件下新建一个项目,在名称处键入线程的使用,然后确定,若按照步骤的话,应该是如下结果:
[attach]5947[/attach]

第二步、这样一个项目就新建好了,下面我们将界面上的开始和退出按钮删除掉,  鼠标选中开始/退出按钮,按下键盘的Del键或者选中右键弹出的页面后点击删除。随后我们将这个页面进行缩小,鼠标放在界面设计的右下角处,这个时候会出现一个斜方向的箭头,然后我们鼠标按下往上拉,界面就被我们缩小了。若按照步骤操作,应该是如下结果:
[attach]5948[/attach]

第三步、在TC软件的右边处点击工具箱,然后找标签,点击标签,然后将鼠标移动到设计界面处再次点击鼠标,这个时候标签就被加入到了界面中,本次我们需要用到2个标签,所以我们以同样的方法再次添加一个标签。添加好了标签之后我们首先选中一个标签,然后右键,会出现一个页面,选择属性,这个时候右边的属性框就被激活,会陈列出该标签的相关属性,这个时候我们在文本处,键入“启动热键:”,然后回车。这个时候标签上就会改为启动热键,但是这个标签尺寸太小,我们选中它将它拉大为适合的宽度。而另外一个标签我们将它以同样的方法键入“停止热键:”。若按照步骤操作,应该是如下结果:

[attach]5951[/attach]


第四步、根据上面的方法,我们在工具箱中找到热键,然后向界面拖入2个热键,分别在启动热键和停止热键的后面。我们随后在其热键的属性中分别更改名称为启动热键和停止热键。在启动热键键值处点击然后按下F9,在停止热键键值处点击然后按下F10。最后我们在其有效处选择false,这样热键框就变成了灰色。若按照步骤操作,应该是如下结果:
[attach]5952[/attach]

第五步、这样我们就将界面做好了,下面我们开始进入代码的编写区,我们在项目的左边,激活项目管理页面,然后找到项目管理-线程的使用展开,然后鼠标双击线程的使用.t这个文件,这个使用我们就进入了代码区域,然后我们将开始函数和退出函数删除,经过整理后,我们在TC软件正上方找到显示主窗口按钮,然后点击,这是我们来了我们设计的界面上,选中热键按键,激活它的属性页面,随之我们点击属性页面的事件下的热键,然后添加<线程的使用>,这样启动热键的函数就被我们添加到了代码区域中,我们以同样的方法进行添加停止函数到代码中,请在页面上添加这2个函数,切勿自动编写这2个函数,否则他们就不起任何作用无法达成与界面的热键产生关联。若按照步骤操作,应该是如下结果:
[attach]5953[/attach]

第六步、因为有的时候我们可能会意外的关闭程序,比如不小心 file:///C:/Users/DELL/AppData/Local/Temp/SGTpbq/3172/00B50715.png 掉了程序,所以我们应该加入一个销毁事件, 点击显示主窗口,然后点击界面设计的空白处,这个时候右边的属性事件处会出现初始化、销毁、窗口关闭,这里我们只需要用到销毁函数,所以直接将销毁这个函数添加入代码中。若按照步骤操作,应该是如下结果:
[attach]5954[/attach]

第七步、前提步骤我们做好了,下面我们开始编写代码。因为这次主要是为了学习线程的使用,所以我们就编写一个比较简单的功能,实现锁鼠标。
首先我们知道启动热键函数和停止热键函数、销毁函数都是独立的函数,但是他们会共用到一个线程句柄,为什么这么说呢,我们在帮助文档中找到,线程开启和线程关闭的函数说明,上面说明了线程的开启需要一个线程的句柄来接受它,而线程的关闭正好就用到了这个线程句柄,但是他们不在一个函数中,那么我们就应该知道这个线程句柄必须是全局的变量,自然而然我们在启动热键函数的外面定义一个整型的线程句柄,为什么是整型,我们可以根据线程开启这个命令的数据类型决定,它返回的是整型,根据上一章中说到了数据类型配对问题我们知道是整型的。然后我们找到线程开启这个命令,查看它的命令说明:

中文函数原型: 整型 开启(字符型 funcname,字符型 param)
英文函数原型: int beginthread(string funcname, string param)
参数:
funcname: 函数名的字符串(当前程序空间名 + 函数名)
param: 线程传参,如果不需要参数,可填空字符串
返回值: 函数执行成功,返回线程句柄,否则为0
从说明中我们得知它里面有2个参数,一个是函数名的字符串一个是传递的参数,那么我们下面应该编写一个自己定义的函数来给它使用,那么这个自定义的函数就应该写我们要锁鼠标的内容。所以我们在启动热键函数的前面定义一个函数,这个函数为返回值为逻辑型的锁鼠标命名的函数。然后我们在锁鼠标里面编写上代码。因为锁鼠标的原理就是将该鼠标不停的至于一个点上,无法对它进行移动。那么它需要用到一个循环语句,这个循环语句是一个死循环,没有任何条件让它跳出,直到你线程关闭它才会停止。然后我们就在启动热键中线程开启的参数加入该名称,因为是在本空间没有任何跨空间,所以用线程的使用点上这个函数名。而后面的那个参数我们没有用到所以为空字符。并且用线程句柄来接受它。若按照步骤操作,应该是如下结果:

[attach]5955[/attach]


第八步、我们一个线程的打开已经做好了,这个时候我们还不能直接生成EXE使用,因为我们只做了打开还没有对它进行关闭,所以下面我们将进行线程的关闭操作,我们在停止热键函数中添加上线程关闭的函数,并弹出消息框提示线程已经关闭。而在销毁函数中我们只需要添加线程关闭即可。若按照步骤操作,应该是如下结果:

[attach]5956[/attach]


第九步、到了这一步很多人,都认为是大功告成了,编译生成后就可以使用了。是的到了这一步的确点击生成后,在TC软件正上方找到打开这个按钮,打开之后我们就可以使用这个EXE了,但是我却认为它还有一些毛病,假设,我在按热键的时候不小心按了2次或者3次,那么是不是就开始了2个或者更多个线程呢?虽然我们可以多按几次来关闭这个线程,但是对于客户可能就不知道,他认为程序为什么不会停止,我们明明按了停止啊!面对这个问题,我们在这里应该得到一个合理的解决方案。
我们在每次开启线程之前加入一个判断语句,因为我们定义线程句柄的时候是为0,而当我们开启了线程之后线程句柄肯定不为0,那么我们就根据这个做出相应的解决方。而停止和销毁也同样进行处理。这样一个完美的程序就可以正常运行了。若按照步骤操作,应该是如下结果:


源码及项目下载需回复可见:

总结:根据以上的代码,大家可以思考一下,我为什么要这样写,这样写有什么好处,对于以后大家写脚本很有帮助。不在为线程关闭不了或者线程开启多个而没有进行提示烦恼。
更新完毕!



作者: 龍吟达人    时间: 2012-10-31 12:47
占楼
作者: shine宝宝    时间: 2012-11-2 20:05
好详细
作者: 梦中流浪    时间: 2012-11-2 23:05
我有个问题要问一下老师,如果有2个函数,分别是A函数和B函数,其中A函数当中会调用B函数,现在我用线程.启动的方式启动了A函数,这个时候可以称为A线程了,然后我需要停止脚本了(不是关闭脚本),我再用线程.关闭的方法关闭A线程,但是如果我关闭的时候,A线程正在调用B函数,并且B函数已经在运行了,那么,脚本是立即停止运行呢,还是等B线程运行结束以后再停止?希望赐教,感谢了!根据我以往学习的C语言来看,应该是不存在B线程的,所以应该是脚本会立即停止,不知道我说的对不对?
作者: 05windows    时间: 2012-11-2 23:47
好教程 不得不顶
作者: 龍吟达人    时间: 2012-11-4 09:54
回复 4楼梦中流浪的帖子

根据线程说明TC的这个线程应该是会立即停止的,涉及插件使用的时候,当然其中也不排除含有异常情况。比如:正在处于循环大漠找字的情况下突然线程关闭可能导致程序奔溃(一般情况不会)。
作者: 554354854    时间: 2012-11-5 17:44
赞啊赞啊
作者: die13719076310    时间: 2012-11-19 17:13
方法不错 只是要让脚本人性化就要增加很多的判断 大大加大了代码量 所以我一般自己写脚本自己用 有问题也是很明了的 支持下楼主
作者: wawy1122    时间: 2012-11-22 09:39
获益匪浅,多谢斑竹大人!!!
作者: oksfsfcj    时间: 2012-12-2 22:41
得好好学习下哈
作者: sport431    时间: 2012-12-4 15:19
都要回复,郁闷
作者: ericyt20    时间: 2012-12-6 08:49
回复 1楼龍吟达人的帖子

好好学习 天天向桑
作者: 我又来了    时间: 2012-12-6 09:16
enefghdfdfhd
作者: 璀璨    时间: 2012-12-6 14:15
学习下
作者: pyh808    时间: 2012-12-7 09:11
好好学习下哈
作者: kk595    时间: 2012-12-8 18:07
顶~~学习了!!
作者: cis4546    时间: 2012-12-9 18:34
得好好学习下哈
作者: zdslhwq    时间: 2012-12-11 12:31
回复 1楼龍吟达人的帖子

发送达方式打法
作者: liu8456    时间: 2012-12-11 14:07
1233333333333
作者: xdpxcici2    时间: 2012-12-11 17:42
好教程,学习了。
作者: 249834426    时间: 2012-12-11 20:40
整型 目标x,目标y
作者: action520    时间: 2012-12-11 22:27
回复 1楼龍吟达人的帖子

学习线程的好贴子
作者: cd1319    时间: 2012-12-15 16:16
谢谢分享~!
作者: pc_nc    时间: 2012-12-16 01:41
学习
作者: 48319725    时间: 2012-12-16 15:47
好好学习
作者: unlt009    时间: 2012-12-16 19:52
看看
作者: qianc    时间: 2012-12-18 10:50
先回复了再看
作者: 龍飛    时间: 2012-12-18 13:36
太详细了 学习学习
作者: hetiekuan    时间: 2012-12-18 14:53
新人膜拜
作者: emgbdk    时间: 2012-12-19 15:18
看完学习学习啊
作者: ericyt30    时间: 2012-12-19 16:32
11111111111111111111111111111111
作者: xxx123a    时间: 2012-12-19 17:24
等待
作者: sega6666    时间: 2012-12-21 23:15
学习!!!!!!!!!!!!!!
作者: aalaopo1    时间: 2012-12-22 17:39
aaaaaaaaaaaaaaaaaaaaaa
作者: 66217287    时间: 2012-12-24 14:56
看看
作者: tc9999    时间: 2012-12-24 15:08
回复可见
作者: a8012602    时间: 2012-12-25 21:54
回复 1楼龍吟达人的帖子

占楼
作者: 光头呵呵    时间: 2012-12-27 20:00
回复 1楼龍吟达人的帖子

真心需要热键,谢谢!
作者: lzq5628989    时间: 2012-12-28 09:08
斑竹幸苦了!
作者: qq5111059    时间: 2012-12-28 13:41
得好好学习下哈
作者: ybszhx    时间: 2012-12-28 21:11
得好好学习下哈
作者: a1041946110    时间: 2012-12-29 13:41
纠结啊放假
作者: yhy6055772    时间: 2012-12-29 16:32
新手纯小白路过
作者: 雨碎江南    时间: 2012-12-29 22:52
很好,顶一个
作者: zc317414    时间: 2013-1-2 20:28
学习一下
作者: 指天椒    时间: 2013-1-2 22:19
这种帖子应该顶顶
作者: tcwsy    时间: 2013-1-2 23:16
very good~~~
作者: 指天椒    时间: 2013-1-2 23:34
自己跟着教程写了一遍,写完后开始脚本没什么问题,再运行几下居然就用不了,什么状况?
作者: yehui    时间: 2013-1-3 09:21
回复 1楼龍吟达人的帖子

看看啊...........
作者: bombester    时间: 2013-1-4 19:02
得好好学习下哈
作者: 一直游    时间: 2013-1-7 13:34
希望对大家有所帮助
作者: xieyamin    时间: 2013-1-8 17:49
得好好学习下哈
作者: 1357501545    时间: 2013-1-9 20:29
线程的使用
作者: csc100    时间: 2013-1-11 11:39
好东西,新人需要的就是思路,希望多一点这样的文章~
作者: zmdqp    时间: 2013-1-14 08:49
学习
作者: heeman    时间: 2013-1-15 14:56
正需要这个
作者: z0230226    时间: 2013-1-16 17:06
11111111111
作者: yjbdmcx    时间: 2013-1-16 20:14
DDDDDDDDDDDDDDD
作者: tc7606919    时间: 2013-1-16 22:31
学习中 侃侃
作者: sj251798241    时间: 2013-1-19 17:22
ddddddddd
作者: wcnfuljbo    时间: 2013-1-19 22:33
好详细
作者: liye0326    时间: 2013-1-25 13:26
回复 1楼龍吟达人的帖子

学习
作者: asd5686123    时间: 2013-1-25 17:10
看看
作者: xianruo    时间: 2013-1-25 22:26
看看看啊看看那
作者: shadow    时间: 2013-1-26 13:24
看看那啊啊啊
作者: shadow    时间: 2013-1-26 17:38
用你的总不对,不知道为什么,我改了下,大神看下
  1. 整型 线程句柄,标记=0
  2. 功能 启动热键_热键()  //[启动热键]
  3.     如果(标记==0)
  4.         线程句柄 = 线程.开启("线程的使用.锁鼠标","")
  5.         标记++
  6.     否则
  7.         辅助.对话框("程序已启动!","温馨提示",0,true)
  8.     如果结束
  9.     返回 真
  10. 功能结束
复制代码

作者: qq06314488    时间: 2013-1-27 18:04
积极回帖,努力帮助新手,赚取TC币
作者: 34749134    时间: 2013-1-28 10:22
好撒 速度 知道
作者: luohualin000    时间: 2013-1-29 15:08
怎么早没看到这文章
作者: JSDYWZ    时间: 2013-2-2 17:28
对学习TC有更快的进步。后期我们还会学习到热键巧妙的设计和  完美防止ESC掉的处理,让你的脚本不在单调
作者: xiao00hei00    时间: 2013-2-3 13:08
学习。。。。
作者: jsdai    时间: 2013-2-5 23:39
这个要收藏
作者: 504247    时间: 2013-2-6 22:41
谢谢分享
作者: aii888    时间: 2013-2-7 09:51

作者: gdlwolf    时间: 2013-2-7 10:58
ssssssssss
作者: kk1304231990    时间: 2013-2-7 11:34
lllllllllllllllllllllll
作者: yahosf    时间: 2013-2-7 23:15
谢谢版主了
作者: 515290363    时间: 2013-2-9 20:11
好好学习一下,不知道能不能解决我的卡死问题..
作者: fank_love    时间: 2013-2-9 23:21
1111111111111111111
作者: 1446300675    时间: 2013-2-10 05:58
5222222222222222看看
作者: ok963963ok    时间: 2013-2-10 17:41
好詳細
作者: youngvsming    时间: 2013-2-12 12:44
来看隐藏的~~继续学习
作者: wudichb    时间: 2013-2-12 18:48
正是我需要的
作者: zxc947474    时间: 2013-2-13 22:36
根据以上的代码
作者: a5754556    时间: 2013-2-13 22:48
回复 4楼梦中流浪的帖子

功能原型:  线程.关闭(线程句柄,类型=0)  
功能说明:  关闭指定句柄的线程,类型:0 安全关闭,1 强制关闭,可能会引起崩溃,慎用
作者: jingaoliang    时间: 2013-2-14 16:05
导师飞
作者: chaoos    时间: 2013-2-15 07:58

作者: 1173497013    时间: 2013-2-15 16:14
好贴啊
作者: tired    时间: 2013-2-15 19:59
顶~~
作者: a0220741    时间: 2013-2-19 12:36
kkkkkkkkkkkkkkkkkk
作者: rengoer    时间: 2013-2-20 15:24
学习
作者: gagod    时间: 2013-2-20 15:31
努力学习中
作者: 1106752189    时间: 2013-2-20 16:48
11111111111111111
作者: paiang    时间: 2013-2-21 13:49
qwdwqdqwd
作者: lindesxc    时间: 2013-2-22 09:19
回复看看看看
作者: dzh    时间: 2013-2-23 22:09
这个要学习!!!
作者: tutoulaoli    时间: 2013-2-24 09:54
wo huiuiuiuiuiuiuui
作者: zyz0112    时间: 2013-2-25 22:57
111111111111111111111111111111111111111111
作者: yangkaia18    时间: 2013-2-26 22:21
111111111111111
作者: e36716877    时间: 2013-2-27 12:38
ding




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1