TC官方合作论坛

 找回密码
 立即注册
查看: 1790|回复: 1

【剑仙教程】多线程技术。

[复制链接]
发表于 2016-12-25 19:16:23 来自手机 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 剑仙十号 于 2018-3-5 11:56 编辑

tc简单开发。多线程技术1。
.
在tc1.0版本以前,脚本执行的方式,都是单线程的。
单线程好比是公路上的单行道,脚本代码只能一条一条的执行,按顺序的执行。
而多线程,则提供了多车道。
多线程像公路上的行车道,超车道,单车道,人行道,多个脚本的代码,可以同时的执行,并排的执行。
………………
………………
在tc简单开发中,
线程是开启着的子函数,多线程,就是多个开启着的子函数!
(函数在tc中又叫功能)。
一子函数在一边放着,没有动,这样不能算做一个线程。
………………
………………
1、一个线程由BeginThread命令,和下面跟着的子函数组成。
例子:
  线程ID = threadbegin("子函数", "")
//线程开启 函数,返回值是线程句柄。tc做错了。
//
功能 子函数()
  //从这里开始你的代码
结束
(ajjl,易语言中的多线程,操作方法大同小异。)
………………
………………
2、使用threadbegin函数,一定要 事先定义好“全局变量”,用来储存线程句柄。
线程开启 函数,返回值是线程句柄。tc做错了。
在tc中规定,写在功能外面的变量,是“全局变量”。
var 线程ID0, 线程ID1, 线程ID2
功能 子函数0()
  //从这里开始你的代码
结束
功能 子函数1()
  //从这里开始你的代码
结束
功能 子函数2()
  //从这里开始你的代码
结束
//
功能 启动_热键()
var ret = 线程获取状态(线程ID0)
if(ret == 假)
  线程ID0 = 线程开启("子函数0", "")
  线程ID1 = 线程开启("子函数1", "")
  线程ID2 = 线程开启("子函数2", "")
end
结束
功能 终止_热键()
  线程关闭(线程ID0)
  线程关闭(线程ID1)
  线程关闭(线程ID2)
结束
线程0,线程1,线程2这三台车,是同时在三条车道上运行着的。
………………
………………
3、多个线程,可以使用同一个子函数。
示例1:
var 线程ID0, 线程ID1, 线程ID2
功能 启动_热键()
  var ret = 线程获取状态(线程ID0)
  if(ret == 假)
    线程ID0 = 线程开启("子函数", "0")
    线程ID1 = 线程开启("子函数", "1")
    线程ID2 = 线程开启("子函数", "2")
  end
结束
功能 终止_热键()
  线程关闭(线程ID0)
  线程关闭(线程ID1)
  线程关闭(线程ID2)
结束
功能 子函数(i)
  while(1)
    traceprint("线程" & i)
    sleep(1000)
  end
结束
//
//
示例2:商业辅助的写法。
1,用数组来保存 线程ID.
2,多个线程,使用同一个子函数.
var 线程ID = 数组()
功能 启动_热键()
  var ret = 线程获取状态(线程ID[0])
  if(ret == 假)
    for(var 下标 = 0; 下标 < 3; 下标++)
      线程ID[下标] = 线程开启("子函数", 下标)
    end
  end
结束
功能 终止_热键()
  for(var 下标 = 0; 下标 < 3; 下标++)
    线程关闭(线程ID[下标])
  end
结束
功能 子函数(i)
  while(1)
    traceprint("线程" & i)
    sleep(1000)
  end
结束
………………
………………
4、在线程中,可以使用命令开启,关闭,暂停,恢复某一线程。
线程开启()
线程关闭()
线程暂停()
线程恢复()
参数1填的,都是线程ID。
//
多线程的优点:
脚本相互制约,相互作用,减少代码量。
………………
………………
5、线程开启() 的代码,禁止放入循环内。
如果线程开启() 放在循环内,循环着开启线程,
内存会被消耗干净,卡死电脑。严重的会烧坏CPU。
………………
………………
6、线程是占用 运算核心的。
一线程就是 一条生产线。
多线程就是 多条生产线。
现在的CPU,i3__双核4线程。i5__4核8线程。i7__8核8线程。
单核CPU在同一时间,只能照着2线程。多核心的,参考上面的文字说明。
在编写辅助时,必须减少线程的数量,提高线程的质量。
每1线程对应 1窗口,
43线程对应 43窗口。
.
mm198702:
这个和 取消勾选“禁止重复运行”,效果一样的吧?
.
卡特琳娜的旋转:
不一样。
在同一脚本中的多线程,可以共享数据的。
而多个脚本之间的线程,数据难以沟通共享。

回复

使用道具 举报

 楼主| 发表于 2016-12-25 19:17:05 来自手机 | 显示全部楼层


多线程技术2。
什么是单线程,双线程,多线程?
.
同时执行两个或者多个,叫多线程。
单线程,就比如你聊完QQ然后上贴吧。
双线程,就比如你可以同时聊QQ和上贴吧
.
再说得详细点,
同一个窗口,一个人干活和两个人干活的区别。
两个不同的窗口,一个人干活和两个人干活的区别。
//
//
单核心与多核心 CPU。
.
单核心,相当于一个"强人"在干活。
单核心双线程,一个“强人”干一项,二项任务,这样是可以的。
单核心多线程,一个“强人”干多项任务,会卡慢电脑。
多核心,则相当于是多了一个人,两个人干活,又势必比我一个“强人”快。
//
//
①单窗口单线程。
一条生产线,1个强人在干活。
②单窗口多线程。
一条生产线,2个强人在干活。
.
③多窗口多线程。
2条生产线,
每条生产线,都有1个强人在干活。
2条生产线,
每条生产线,都有2个强人在干活。
//
//
攒机。看配置请微信
计算机,单线程和双线程的差别到底是什么?
Andrew He
多线程相当于两条生产线,你发出的需求就是他们的任务,两条就可以并行处理两个任务。
.
不过我猜,可能问的没那么简单,
i3是双核4线程,i5是4核4线程,i7则是4核8线程,不知道题主是不是问这些中间的区别。
(同核心不同线程,同线程不同核心),就顺便简单引申一下吧。
.
线程是逻辑控制单元,而核心是真正独立的物理核心。
所以i3多线程,相当于是我是一个多任务强手,甚至于我比一般人多一只手,所以我处理多任务的时候会比一般人快。
但i5是多核心,则相当于是多了一个人,两个人干活,又势必比我一个“强人”快。
i7。i7原理和i3一样,就是比i3多了2个核,所以比i3多拥有4个线程。
//
//
追问(提问者):
也就是说,单核心 也拥有双线程?
双核单线的任务处理能力强于单核双线程?
.
Andrew He:
双核至少也有双线程,所以肯定强于单核双线程。
Andrew He:
也就是说一个核心,至少有一个线程,多出来的线程可以是 超线程技术或者其他技术。
但单核双线程,是比不上真正的双核双线程的。


自由存在:
有基础,才能扩展其他领域。
剑仙十号:
基础知识是重要的。c++,c#的多线程也差不多。
//
tc简单编程。学习群: 433286131。
新手众多,大神众多,群文件中.资源海量。
学习tc,互帮互助。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-29 18:04 , Processed in 0.034999 second(s), 22 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表