| 
 TC 多线程的运用  
一.理解进程与线程 在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程。 线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。 特点:线程不能独立运行,必须依赖于进程,在进程中运行。 每个程序至少有一个线程称为主线程。 单线程:只有一条线程的进程称为单线程 多线程:有不止一个线程的进程称为多线程  
 二、开启多线程的优点和缺点 提高界面程序响应速度。通过使用线程,可以将需要大量时间完成的流程在后台启动单独的线程完成,提高前台界面的相应速度。 充分利用系统资源,提高效率。通过在一个程序内部同时执行多个流程,可以充分利用CPU等系统资源,从而最大限度的发挥硬件的性能。 当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会降低程序的执行效率。但是,相对于优势来说,劣势还是很有限的,所以现在的项目开发中,多线程编程技术得到了广泛的应用。  
三、线程开启函数说明。     1. 函数原型----线程.开启(字符型  功能,字符型  功能参数)     这个是线程的开启方法,3.0版本对线程方法进行了改进,支持线程传参,不得不说,又是对线程操作的一大改进啊.(如果没得参数,传空值就好了)  
     3.0线程开启还改进了线程方法上下调用的问题,不管你线程方法是在线程开启的上面还是线程开启的下面,都可以直接通过开启线程来调用。     
       参数:            功能: 函数名的字符串(当前程序空间名 + 函数名) 
          功能参数: 线程传参,如果不需要参数,可填空字符串  
  2.函数原型--线程.扩展开启(字符型  开启功能,字符型  开启功能参数,字符型  结束功能,字符型  结束功能参数) 
    这个是线程扩展开启方法,3.0版本对线程扩展开启方法进行了改进,支持线程传参,不得不说,又是对线程操作的一大改进啊.(如果没得参数,传空值就好了)  
         3.0线程扩展开启还改进了线程扩展开启方法上下调用的问题,不管你线程方法是在线程扩展开启的上面还是下面,都可以直接通过开启线程来调用。    
    参数: 
           开启功能: 要开启的线程函数 
           开启功能参数: 线程开启时传入被调用函数的参数,如果不需要参数,可填空字符串            结束功能: 在线程结束时调用的函数(线程只能在正常关闭或结束情况下才会调用该函数) 
          结束功能参数: 线程关闭时传入被调用函数的参数,如果不需要参数,可填空字符串      
举例: 一.简单的多线程操作,每个线程执行不同的任务。 1.流程图说明 
  
2.详细举例
 -     空间 我的程序
 
 -     //这是一个以"我的程序"命名的空间,下面的语句都在这个空间里实现
 
 -     线程1
 
 -     //定义一个全局变量,来获取开启的线程
 
 -     线程2
 
 -     //定义一个全局变量,来获取开启的线程
 
 -     功能 任务1()
 
 -     循环(真)
 
 -     //当条件为真时,该执行一个无限循环语句
 
 -     辅助.等待(1000)
 
 -     //等待1000毫秒,然后再执行下面语句
 
 -     辅助.消息框("执行任务1")
 
 -     //弹一个"执行任务1"的消息框
 
 -     循环结束
 
 -     //循环结束语句
 
 -     返回 真
 
 -     //函数返回语句
 
 -     功能结束
 
 -     //功能函数用完后结束该功能
 
  
-     功能 任务2()
 
 -     循环(真)
 
 -     //当条件为真时,该执行一个无限循环语句
 
 -     辅助.等待(1000)
 
 -     //等待1000毫秒,然后再执行下面语句
 
 -     辅助.消息框("执行任务2")
 
 -     //弹一个"执行任务1"的消息框
 
 -     循环结束
 
 -     返回 真
 
 -     功能结束
 
 -     功能 开始_点击()
 
 -     //这是主函数的入口处,语句的执行从这里开始
 
 -     辅助.等待(1000)
 
 -     //等待1秒
 
 -     线程1=线程.开启("我的程序.任务1","")
 
 -     //在我的程序这个空间开启线程任务1,并用线程编号1来获得
 
 -     线程2=线程.开启("我的程序.线程方法2","")
 
 -     //在我的程序这个空间开启任务2,并用线程编号2来获得
 
 -     如果结束
 
 -     返回 真
 
 -     功能结束
 
 -     空间结束
 
  
- 执行结果:线程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访问。 
 
 
 
 |