第八讲多线程ppt课件.ppt

上传人:sccc 文档编号:5317337 上传时间:2023-06-25 格式:PPT 页数:25 大小:842.03KB
返回 下载 相关 举报
第八讲多线程ppt课件.ppt_第1页
第1页 / 共25页
第八讲多线程ppt课件.ppt_第2页
第2页 / 共25页
第八讲多线程ppt课件.ppt_第3页
第3页 / 共25页
第八讲多线程ppt课件.ppt_第4页
第4页 / 共25页
第八讲多线程ppt课件.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《第八讲多线程ppt课件.ppt》由会员分享,可在线阅读,更多相关《第八讲多线程ppt课件.ppt(25页珍藏版)》请在三一办公上搜索。

1、多线程,西源软件培训中心,回顾,调试是搜寻和消除应用程序中的错误的过程语法错误表示编译器无法理解代码调试模式可用来重复编译和排除应用程序中的错误,直至能够成功运行“局部变量”窗口允许用户监控当前程序中所有变量的值单元测试和集成测试是测试大型应用程序的常用技术当应用程序遇到运行时错误时,就会引发异常C#中的所有异常都派生自 Exception 类,目标,理解线程的概念理解.NET中线程的属性和方法创建和使用线程理解线程的特点、优点及使用场合,同时执行所有任务,时间更少,效率更高,线程简介,读,写,一览无遗,血液循环,在同一时间点执行各项进程,编译程序 发送/接收邮件 打印文件 其他,操作系统允许

2、计算机同时执行多项操作,程序(进程),线程简介,程序 1,程序 2,线程 1,线程 2,线程 3,线程 1,线程 2,线程 3,单独的执行路径,多线程,线程简介,在以下情况中可能要使用到多线程:,程序需要同时执行两个或多个任务,程序要等待某事件的发生,例如用户输入、文件操作、网络操作、搜索等,后台程序,System.Threading 命名空间 2-1,System.Threading 命名空间 2-2,Thread 类的属性和方法 2-1,引用System.Threading 命名空间,Thread 线程实例名=new Thread(new ThreadStart(方法名);,运行在线程上的

3、方法,只创建但不启动线程,线程实例名.Start();,Thread 类的属性和方法,静态,静态,线程的生命周期,在 I/O 操作期间线程被阻止,线程已创建但并未启动,线程已启动,I/O 操作完成后运行,线程被阻止,另一个操作正在进行,提前中断或特地停止线程,暂时中断的线程,线程已恢复,示例,class SimpleThreadDemo static void Main(string args)Thread.CurrentThread.Name=“主线程;Thread objThread=new Thread(new ThreadStart(ActionMethod);objThread.Na

4、me=“子线程;/启动子线程,并为该线程执行 ActionMethodobjThread.Start();/这将为主线程执行 ActionMethodActionMethod();static void ActionMethod()for(int count=1;count=10;count+)Console.WriteLine(“线程名:+Thread.CurrentThread.Name);,实例化 objThread 线程并开始执行 ActionMethod(),将由应用程序线程执行,输出结果混乱,锁定机制,程序,线程1,线程2,共享资源,锁定机制保证每次只有一个线程可以访问共享资源,缓

5、冲和隔离,示例,class ThreadLockDemostatic void Main()Thread.CurrentThread.Name=“主线程;ThreadLockDemo objDemo=new ThreadLockDemo();Thread newThread=new Thread(new ThreadStart(objDemo.DoTask);newThread.Name=“子线程;newThread.Start();objDemo.DoTask();void DoTask()lock(this)for(int count=1;count=10;count+)Console.W

6、riteLine(“线程名:+Thread.CurrentThread.Name);,实例化 newThread 线程并开始执行 DoTask(),锁定当前实例 objDemo,在块中完成执行,然后释放对象,调度线程,程序 1,程序 2,线程 1,线程 2,线程 3,线程 1,线程 2,线程 3,先执行哪个线程?,调度线程,ThreadPriority 枚举,示例,static void TaskTwo()for(int index=5000;index=4990;index-)Console.WriteLine(index);,static void Main(string args)Thr

7、ead objThreadOne=new Thread(new ThreadStart(TaskOne);Thread objThreadTwo=new Thread(new ThreadStart(TaskTwo);objThreadOne.Start();objThreadTwo.Start();,static void TaskOne()for(int count=1;count=5;count+)Console.WriteLine(count*2);,无优先级线程,同时执行,输出无序.,示例,static void Main(string args)Thread.CurrentThre

8、ad.Name=“主线程;Thread objThreadOne=new Thread(new ThreadStart(TaskOne);objThreadOne.Name=“子线程 1;Thread objThreadTwo=new Thread(new ThreadStart(TaskTwo);objThreadTwo.Name=“子线程 2;/这将启动子线程 objThreadOne.Start();objThreadTwo.Start();objThreadTwo.Priority=ThreadPriority.Highest;,将在执行第一个线程前执行 objThreadTwo,线程

9、安全性,线程安全性就是保护类的成员和代码的安全,从而使它们不会同时被几个线程中断如果类中的成员和代码受到保护而不会被几个线程中断,则这个类称为线程安全的类,void DoTask()lock(this).,线程安全,应用程序示例,演示多线程计算的应用程序,应用程序示例,/lock(this)long sum=long.Parse(txtOutput.Text);sum+=result;txtOutput.Text=sum.ToString();,演示输出结果,应用程序示例,思考:1.为何100个线程所消耗的时间比一个线程消耗的时间要长?2.对于游戏,不同的动作(例如跑步和射击)会真的采用线程来

10、描述吗?如果不采用线程,你知道哪些方案?,总结,线程是在共享内存空间中并发的多道执行路径在 C#中,是使用 System.Threading 命名空间中的 Thread 类来创建线程的线程优先级可以更改为 ThreadPriority 枚举中定义的一个值C#中的 lock 关键字是实现线程同步的一种方法同步的线程称为安全线程除非绝对必要,否则不要创建线程安全的代码,因为添加不必要的锁定会降低性能,作业,进程和线程有什么区别?2个线程。线程1从1循环到10000,线程2从1循环到20000,结果分别在其下控制台中显示。,作业,编写一个基于Windows窗体的应用程序,实现打字练习的功能,要使用多线程,在主线程里用Timer控件定时产生Label控件,每个Label控件显示一个随机产生的字母,每产生一个Label就新开一个线程(辅助线程),这个线程用于控制Label控件的向下移动,主线程监视键盘输入,如果键盘输入文本与这个Label控件的Text相同,Label消失。提示:每个辅助线程监视Label状态,如果Label消失,对应的线程终止。Timer控件的使用请查阅MSDN。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号