windows多线程程序设计.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程程序设计 在实际的项目开发中,我们或多或少的都接触过多线程 程序的设计,有点零星的经验,以我本人的亲身经历而言, 对于多线程的编程,我属于“野路子” ,有点照猫画虎的意 思,“借着”电脑维修之际,系统的学习了一下多线程的编 程技术,现将笔记整理如下,希望对有志于学习多线程的同 志们有所帮助。 一. 结束线程: 可以利用函数,该函数会传回线程函数的返回值,然而该函数 的一个糟糕行为是:当线程还在进行,尚未有所谓结束代码时,它会 传回表示成功,如果这样第二个形参指向的内存区域中应该放的是, 要注意这种行为, 也就是说你不可能从其返回值中知道 “到底线程还 在运行还是它已结束” ,而应根据中是否为来判断。 (;;) { ; (); ((*) ) 线程结束 } 强制结束一个线程可以利用函数 ( );形参指定此线程之结束代 码,此函数类似于 中的 ()函数,因为它可以在任何时候被调用并且 绝不会返回,任何代码若放在此行之下,保证不会被执行。 程序启动后就执行的那个线程称为主线程, 主线程有两个特点, 第一,它必须负责程序中的主消息循环;第二,这一线程的结束 (不 论是因为返回或因为调用了 )会使得程序中的所有线程都被强迫结 束,程序也因此而结束,其他线程没有机会做清理工作。所以在或结 束之前,应先等待所有的线程都结束。 诊断宏: Illi () () () (!()) (()) ( , , , ) { J []; []; J ( (), J ); (, \ :\\ \\: \, , , , );II \\: \, , , , ); ((), , (), , ); (); (, , ); (, , , ); (); } 多线程程序设计成功的关键 各线程的数据要分离开来,避免使用全局变量。 不要在线程之间共享对象 确定你知道你的线程状态,不要径自结束程序而不等待它们的结 束。 (4)让主线程处理用户界面 二.关于…()函数 ( 5 ); 参数: 等待对象的 (代表一个核心对象 ) —等待的最长时间,时间终了,即使尚未称为激发状态, 此函数 还是要返回,此值可以是 (代表立刻返回 ),也可以是代表无穷等待。 返回值: 如果函数失败,则传回 ,这时候你可调用取得更多信息,此函数 的成功有三个因素: 等待的目标 (核心对象 )变成激发状态,这种情况下返回值将 为. 核心对象变成激发状态之前,等待时间终了,这种情况下 返回. 如果一个拥有 (互斥器 )的线程结束前没有释放,则传回 . 获得一个线程对象的之后,要求操作系统让线程睡觉,直到 以下任何一种情况发生: 线程结束 时间终了,该值系从函数调用后开始计算。 由于操作系统追踪线程, 所以即使线程失事或被强迫终止, 该函 数也能正常工作。 关于该函数的第二个参数,若设定为,可使你能够检查的状态并 立刻返回,没有片刻停留,如果已经备妥,那么这个函数会成功并传 回,否则,这个函数立刻返回并传回. 可被使用的核心对象有两种状态: 激发与未激发。函数会在目标 变成激发状态时返回。 当线程正在执行时,线程对象处于未激发状态,当线程结束,线 程对象就被激发了,因此,任何线程如果等待的是一个线程对象,将 会在等待对象结束时被调用,因为当时线程对象自动变成激发状态。 的核心对象激发状态的意义 对象 说明 当线程结束时,线程对象即被激发,当线程 还在进行时,则对象处于未激发状态,线程 对象由或产生 当进程结束时,进程对象即被激发,当 进程还在进行时,则对象处于未激发状 态,或会传回一个进程对象的 当一个特疋的磁盘子目录中发生一件 特别的变化时,此对象即被激发,此对 象系由产生 当窗口的输入缓冲区中有数据可用时, 此对象处于激发状态,或两函数可以获 得. 对象的状态直接受控于应用程序所使 用的三个函数:(), ,。或都可以传回一个,对象的状态可 被操作系统设定如果使用于操作时。 如果没有被任何线程所拥有,它就是处 于激发状态,一旦一个等待的函数返回 了,也就自动重置为未激发状态,或都 可以获得一个。 有点像,但它有个计数器,可以约束其 拥有者(线程)的个数,当计数器大于时, 处于激发状态,当计数器等于时,处于 未激发状态,或可以传回一个 。 函数: ) 参数: —表示所指之数组的元素个数,最大容量为 —指向一个由对象所组成的数组,这些不需要为相同的类型。 —如果此为,表示所有的都必须激发,此函数才得以返回,否则此函 数将在任何一个激发时返回。 —当该事件长度终了时,即使没有任何激发,此函数也会返回,此值 可为,以便测试,亦可指定,表示无穷等待。 返回值: 如果因时间终了而返回,则返回值是. 如果是,那么返回值将是. 如果是,那么返回值减去,就表示数组中的哪一个被激发了。 如果你等待的对象中有任何,那么返回值可能

文档评论(0)

youbika + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档