网络与通信程序设计 - 11 委托事件与多线程_第1页
网络与通信程序设计 - 11 委托事件与多线程_第2页
网络与通信程序设计 - 11 委托事件与多线程_第3页
网络与通信程序设计 - 11 委托事件与多线程_第4页
网络与通信程序设计 - 11 委托事件与多线程_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、物理与电信工程学院物理与电信工程学院 唐小煜唐小煜邮箱:邮箱:Q Q 群:群:3975455023975455022v .NET Framework .NET Framework 高级开发高级开发 http:/ 观察程序设计模式:http:/ 异步编程设计模式:http:/ 使用线程和线程处理:http:/ 委托委托 委托是一种特殊的引用类型引用类型,是引用方法的类型。它将方法作为特殊的对象封装起来,将方法作为变量或者参数进行传递。一旦委托分配(绑定)了方法,将与该方法具有完全相同的行为。 可以理解:当需要将方法作为方法的参数时,就要考虑委托v 委托的特点委托的特点 委托类似于 C+ 函数指针

2、,但它是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;可以对一个事件调用多个方法。 方法不需要与委托签名(由返回类型和参数组成)精确匹配。v “事件事件” 是当对象发生某些事情时,向其他对象提供通知的一种方法。在C#中是通过delegate实现的。v 事件有两个角色:事件有两个角色: 事件发送方,指触发事件的对象 事件接收方,指注册想在某种事件发生时被通知的对象ObserverObserver观察程序观察程序发布者委托订阅者订阅者订阅者订阅者v EventHandlerEventHandler委托类型委托类型 public delegate vo

3、id EventHandler(object sender, EventArgs e); this.button1.Click += new System.EventHandler(this.button1_Click);/见Designer.cs文件v .Net Framework.Net Framework的编码规范:的编码规范: 委托类型的名称都应该以EventHandler结束 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs) 事件的命名为委托去掉 EventHandler之后剩余的部分 继承自

4、EventArgs的类型应该以EventArgs结尾10v 同步与异步同步与异步 同步(Synchronous)和异步(Asynchronous)的概念来自通信领域v 同步调用与异步调用同步调用与异步调用 同步调用,发出一个功能调用时,没有得到结果之前,该调用不返回。 异步调用,发出功能调用后,调用者不能立刻得到结果,但会立即从被调用者返回。v 阻塞调用与非阻塞调用阻塞调用与非阻塞调用* * 阻塞调用,调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。 非阻塞调用,在不能立刻得到结果之前,函数不会阻塞当前线程,而会立刻返回。v 异步操作异步操作 异步操作通常用于执行完成时间可

5、能较长的任务,如打开大文件、连接远程计算机或查询数据库。 异步操作在主应用程序线程以外的线程中执行。v .NET Framework .NET Framework 对异步编程功能的支持:对异步编程功能的支持: 文件 IO、流 IO、套接字 IO。 网络。 远程处理信道(HTTP、TCP)和代理。 使用 ASP.NET 创建的 XML Web services。 ASP.NET Web 窗体。 使用 MessageQueue 类的消息队列。v 使用使用 IAsyncResult IAsyncResult 调用异步方法调用异步方法 v 使用委托进行异步编程使用委托进行异步编程 v 使用基于事件的异

6、步模式进行多线程编程使用基于事件的异步模式进行多线程编程v 请参考:请参考: http:/ 进程:进程: 进程是正在运行的程序实例,是系统调度和资源分配的独立单位 系统进程、用户进程v 线程:线程: 线程是程序中的执行流,是程序执行的最小处理单位 在单个程序中同时运行多个线程完成不同的工作,称为多线程v 特点特点 多个进程的内部数据和状态都是完全独立的,而多线程共享一块内存空间和一组系统资源,有可能互相影响 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换负担要小v 多线程可以帮助程序更充分地利用时间片,而多核多线程可以帮助程序更充分地利用时间片,而多

7、核CPUCPU和和多核系统的出现,更突显了这一优势多核系统的出现,更突显了这一优势v 但多线程程序也会导致但多线程程序也会导致CPUCPU频繁的切换线程,同时也带来频繁的切换线程,同时也带来线程同步、线程安全等问题线程同步、线程安全等问题v 新的软硬件架构会在内部进行一些优化,提高软件硬件的新的软硬件架构会在内部进行一些优化,提高软件硬件的工作效率工作效率v .NET Framework 4 .NET Framework 4 引入新的编程模型引入新的编程模型, ,支持并行工作支持并行工作 Parallel和PLINQv 并行设计模式并行设计模式 并行循环模式 并行任务模式 并行合并模式 Fut

8、ure模式 动态任务并行模式 流水线模式v 线程类线程类 ThreadThread System.Threading.Thread: http:/ 线程操作线程操作 创建线程,启动线程,休眠线程,挂起线程,继续线程,终止线程属性名属性名描描 述述CurrentThread只读属性,获取当前正在运行的线程IsAlive判断线程是否处于活动状态IsBackground获取或设置一个值,该值指示某个线程是否为后台线程IsThreadPoolThread获取一个值,该值指示线程是否属于托管线程池Name获取或设置线程的名称PriorityThreadPriority枚举类型,代表线程的优先级,如:No

9、rmal、AboveNormal、BelowNormal、Highest、LowestThreadStateThreadState枚举类型,代表当前线程的状态,如:Unstarted、Running、WaitSleepJoin、Stopped、AbortRequested、Suspended、Aborted等方法名方法名描描 述述Start( )启动线程的执行Suspend( )挂起线程,或者如果线程已挂起,则不起作用Resume( )继续已挂起的线程Interrupt( )终止处于Wait或者Sleep或者Join线程状态的线程Join( )阻塞调用线程,直到某个线程终止时为止Sleep(

10、)将当前线程阻塞指定的毫秒数Abort( )终止一个线程的运行。如果线程已经终止,则不能通过Thread.Start( )来启动线程v Thread thread=new Thread(new ThreadStart(dosth);Thread thread=new Thread(new ThreadStart(dosth);v thread.Start();thread.Start();v thread.Join(2000);thread.Join(2000); /暂停暂停20002000毫秒毫秒v thread.Interrupt();thread.Interrupt();v thread

11、. Suspend();thread. Suspend();v thread. Resume();thread. Resume();v thread.Abort();thread.Abort();v 死锁和争用条件死锁和争用条件 多线程异步执行,可以解决响应性和多任务的问题,但同时引入了资源共享和同步问题。主要表现为:死锁和争用条件。 http:/ 同步机制和同步线程同步机制和同步线程 lock、Monitor、Mutex等v 使用使用LockLock lock (x) DoSomething(); v 等效等效MonitorMonitor System.Object obj = (Syste

12、m.Object)x; System.Threading.Monitor.Enter(obj); try DoSomething(); finally System.Threading.Monitor.Exit(obj); v 窗体控件的线程安全调用。窗体控件的线程安全调用。 Invoke、 BeginInvoke调用委托 Invoke是同步方法,一直等待至更新任务完成,阻塞调用线程 BeginInvoke是异步方法,封装完成后马上返回,不等待执行结果,不阻塞调用线程;可以使用EndInvoke方法等待异步操作的完成v 特点特点 用来执行多线程任务,允许在一个单独的线程上执行一些操作。 DoWork 事件方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论