第8章网络编程基础讲解.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章网络编程基础讲解

* * * * * * * * * * * * * * * * * * * * * * * * * * * * IPHostEntry hostInfo = Dns.GetHostByName(); * * * * * * * * * * * * * * * * * * * * * * 5.4 多线程编程 5.4.2 C#中多线程的开发 (2)启动线程 启动线程很简单,只需要调用Thread类的Start方法,如上例所示。 (3)休眠线程 线程的休眠是让当前的线程进入一定时间的休眠状态,时间一到线程将继续执行。通过Thread类的Sleep方法来实现线程的休眠。Thread类中有两个重载的Sleep方法,一个带有int类型的参数,用于指定休眠的毫秒(ms)数,另一个带有TimeSpan类型的参数,指定休眠的时间段。示例如下: Thread.Sleep(1000);//线程休眠1000毫秒 TimeSpan WaitTime = new TimeSpan(0,0,0,0,1000); Thread.Sleep(WaitTime);//线程休眠按天 小时 分钟 秒 毫秒计算 (4)挂起线程 线程的挂起是暂停线程,如果不再启动线程,它将永远保持暂停状态。只有当前运行的线程才可以被挂起,对已经挂起的线程实施挂起没有作用,因此在使用Supend方法前,一般要先检查该线程是否正在运行。通常是查询Thread的ThreadState属性值。示例如下: if (t1.ThreadState == ThreadState.Running)//判断线程是否正在运行 t1.Suspend(?); 5.4 多线程编程 5.4.2 C#中多线程的开发 (5)继续线程 已经挂起的线程可以使用Thread类的Resume方法继续运行。如果没有被挂起的线程使用该操作将不起作用,所以使用Resume方法前,一般也先判断线程是否已经被挂起。示例如下: if (t1.ThreadState == ThreadState.Suspended)//判断线程是否已被挂起 t1.Resume(?); (6)终止线程 在终止线程之前,一般先判断线程的IsAlive属性,确认该线程是否处于活动状态,处于活动状态的线程才可以使用Thread类的Abort方法进行终止。示例如下: if (t1.IsAlive)//判断线程是否处于活动状态 t1.Abort(?); 2.线程同步 在包含多个线程的应用程序中,线程间有时会共享存储空间,当两个或多个线程同时访问同一共享资源时,必然会出现冲突问题。如一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一个文件中修改数据。在这种情况下,数据可能变得不一致。针对这种问题,通常需要让一个线程彻底完成其任务后,再运行下一个线程;或者要求一个线程对共享资源访问完全结束后,再让另一个线程访问该资源,必须保证一个共享资源一次只能被一个线程使用。实现此目的的过程称为线程同步。 5.4 多线程编程 5.4.2 C#中多线程的开发 在C#.NET中提供了多种实现线程同步的方法。如加锁(Lock)、监视器(Monitor)、互斥体(Mutex)等。 (1)加锁(Lock) 实现多线程同步的最直接办法就是加锁,就像服装店的试衣间一样,当一个顾客进去试衣时把试衣间门锁上,其他顾客必须等他出来后才能进去试衣。C#语言的lock语句就可以实现这个功能。它可以把一段代码定义为互斥段,在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 其基本格式如下: lock(expression)statement_block 其中expression代表要加锁的对象,必须是引用类型。一般地,如果要保护一个类的实例成员,可以使用this;如果要保护一个静态成员,或者要保护的内容位于一个静态方法中,可以使用类名, 格式为:lock(typeof(类名)){ }。 statement_block:代表共享资源,在一个时刻内只能被一个线程执行。 (2)监视器(Monitor) Monitor的功能和lock有些相似,但是它比lock功能更灵活、更强大。Monitor相当于服装店试衣间的开门人,他管着试衣间的钥匙,而线程好比是要使用试衣间的顾客,他要进入试衣间之前,必须先从看门人手上获取钥匙,试衣出来以后,需要把钥匙还给看门人,看门人可以把它交给下一个正在等待进入试衣间的顾客。在这个过程中,顾客会

文档评论(0)

shuwkb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档