TC官方合作论坛

 找回密码
 立即注册
查看: 13960|回复: 62
打印 上一主题 下一主题

[功能] TC 多线程

[复制链接]
跳转到指定楼层
楼主
发表于 2012-6-2 10:16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TC 多线程的运用

一.理解进程与线程
在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。
线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。
特点:线程不能独立运行,必须依赖于进程,在进程中运行。
每个程序至少有一个线程称为主线程。
单线程:只有一条线程的进程称为单线程
多线程:有不止一个线程的进程称为多线程

二、开启多线程的优点和缺点
提高界面程序响应速度。通过使用线程,可以将需要大量时间完成的流程在后台启动单独的线程完成,提高前台界面的相应速度。
充分利用系统资源,提高效率。通过在一个程序内部同时执行多个流程,可以充分利用CPU等系统资源,从而最大限度的发挥硬件的性能。
当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会降低程序的执行效率。但是,相对于优势来说,劣势还是很有限的,所以现在的项目开发中,多线程编程技术得到了广泛的应用。

三、线程开启函数说明。
    1. 函数原型----线程.开启(字符型  功能,字符型  功能参数)
    这个是线程的开启方法,3.0版本对线程方法进行了改进,支持线程传参,不得不说,又是对线程操作的一大改进啊.(如果没得参数,传空值就好了)
    3.0线程开启还改进了线程方法上下调用的问题,不管你线程方法是在线程开启的上面还是线程开启的下面,都可以直接通过开启线程来调用。
   
      参数:
          功能: 函数名的字符串(当前程序空间名 + 函数名)
          功能参数: 线程传参,如果不需要参数,可填空字符串

2.函数原型--线程.扩展开启(字符型 开启功能,字符型  开启功能参数,字符型 结束功能,字符型  结束功能参数)
    这个是线程扩展开启方法,3.0版本对线程扩展开启方法进行了改进,支持线程传参,不得不说,又是对线程操作的一大改进啊.(如果没得参数,传空值就好了)
        3.0线程扩展开启还改进了线程扩展开启方法上下调用的问题,不管你线程方法是在线程扩展开启的上面还是下面,都可以直接通过开启线程来调用。
  
   参数:
           开启功能: 要开启的线程函数
           开启功能参数: 线程开启时传入被调用函数的参数,如果不需要参数,可填空字符串
           结束功能: 在线程结束时调用的函数(线程只能在正常关闭或结束情况下才会调用该函数)
          结束功能参数: 线程关闭时传入被调用函数的参数,如果不需要参数,可填空字符串
   

举例:
一.简单的多线程操作,每个线程执行不同的任务。
1.流程图说明

2.
详细举例
  1.     空间 我的程序
  2.     //这是一个以"我的程序"命名的空间,下面的语句都在这个空间里实现
  3.     线程1
  4.     //定义一个全局变量,来获取开启的线程
  5.     线程2
  6.     //定义一个全局变量,来获取开启的线程
  7.     功能 任务1()
  8.     循环(真)
  9.     //当条件为真时,该执行一个无限循环语句
  10.     辅助.等待(1000)
  11.     //等待1000毫秒,然后再执行下面语句
  12.     辅助.消息框("执行任务1")
  13.     //弹一个"执行任务1"的消息框
  14.     循环结束
  15.     //循环结束语句
  16.     返回 真
  17.     //函数返回语句
  18.     功能结束
  19.     //功能函数用完后结束该功能

  20.     功能 任务2()
  21.     循环(真)
  22.     //当条件为真时,该执行一个无限循环语句
  23.     辅助.等待(1000)
  24.     //等待1000毫秒,然后再执行下面语句
  25.     辅助.消息框("执行任务2")
  26.     //弹一个"执行任务1"的消息框
  27.     循环结束
  28.     返回 真
  29.     功能结束
  30.     功能 开始_点击()
  31.     //这是主函数的入口处,语句的执行从这里开始
  32.     辅助.等待(1000)
  33.     //等待1秒
  34.     线程1=线程.开启("我的程序.任务1","")
  35.     //在我的程序这个空间开启线程任务1,并用线程编号1来获得
  36.     线程2=线程.开启("我的程序.线程方法2","")
  37.     //在我的程序这个空间开启任务2,并用线程编号2来获得
  38.     如果结束
  39.     返回 真
  40.     功能结束
  41.     空间结束

  42. 执行结果:线程1和线程2同时运行。
复制代码
线程1每隔一秒弹出"执行任务1"
线程2每隔一秒弹出"执行任务2".


二.多线程执行同一个任务,这里我们通过临界区,来解决两个同时运行的线程抢操作问题。
1.流程图说明
    空间 临界区
    对象句柄 //定义一个全局的临界区句柄
    功能 任务(访问线程)
    线程.进入临界区(对象句柄) //进入临界区,这时候其他线程不能访问临界区中资源,想要访问的线程会被挂起等待
    for(i=0;i<4;i++)
    辅助.消息框("线程" +访问线程+"访问")
    endfor
    线程.离开临界区(对象句柄) //离开临界区,这时候其他线程可以访问临界区中的资源
    返回 真
    功能结束

    功能 开始_点击()
    对象句柄=线程.创建临界区() //创建临界区对象
    i=10 //初始化 i
    句柄A=线程.开启("临界区.任务","A")
    句柄B=线程.开启("临界区.任务","B")
    线程.删除临界区(对象句柄) //最后记得删除临界区对象释放资源,这时候如果在 线程.进入临界区(对象句柄) 程序就可能崩溃,因为对象不存在了
    返回 真
    功能结束
    空间结束执行结果:线程A和线程B会同时访问任务方法(为了看清楚是那个线程方法,我们采用了线程传参的方法来分辨),但是我们用临界区来控制,一次只允许一个线程进入,可能是A或者B先访问。所以有可能是先弹出5次线程A访问或者5次线程B访问。



本帖子中包含更多资源

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

x
回复

使用道具 举报

沙发
发表于 2012-6-2 10:55:25 | 只看该作者
支持东哥,支持TC。
回复 支持 反对

使用道具 举报

板凳
发表于 2012-6-2 10:56:29 | 只看该作者
学习了 。
回复 支持 反对

使用道具 举报

地板
发表于 2012-6-2 11:11:25 | 只看该作者
好好学习一下。。
回复 支持 反对

使用道具 举报

5#
发表于 2012-6-2 11:23:41 | 只看该作者
看看 。。东哥  给力啊。。
回复 支持 反对

使用道具 举报

6#
发表于 2012-6-2 11:24:19 | 只看该作者
给力的说。 是不是官方所有教程都更新看? 我看TC教程里面都是 最新的 帖子。。
回复 支持 反对

使用道具 举报

7#
发表于 2012-6-2 13:50:11 | 只看该作者

TC多线程

学习了,TC教材这块好像都更新了。

回复 支持 反对

使用道具 举报

8#
发表于 2012-6-2 13:51:02 | 只看该作者
终于晓得临界区了。。
回复 支持 反对

使用道具 举报

9#
发表于 2012-6-2 16:09:44 | 只看该作者
这个不收藏的话就亏本了
回复 支持 反对

使用道具 举报

10#
发表于 2012-6-2 16:43:06 | 只看该作者
多谢................
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

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

GMT+8, 2025-9-17 05:38 , Processed in 0.142244 second(s), 25 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

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