网站大量收购独家精品文档,联系QQ:2885784924

可视化ppt教程 多线程.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可视化ppt教程 多线程

可视化程序设计 第7章多线程程序设计 线程与线程的创建 进程和线程 线程的创建 线程的控制 线程的挂起 线程的恢复 线程的终止 线程的多核调用 线程之间数据共享 线程同步与互斥 多线程之间的竞争 使用临界区对象实现线程竞争 使用互斥量实现线程竞争 使用信号量对象实现线程同步 使用事件对象实现线程同步 使用消息实现线程之间的通信 进程和线程 线程在这里分为两种,一个是工作线程,一个是用户界面线程 运行状态就是进程正在执行的状态,就绪状态就是进程等待执行的状态,阻塞状态是进程等待某一事件发生的状态,这个事件可能是输入输出的完成,也可能是其他进程完成某项任务(后面描述)。进程可以从运行状态到阻塞状态是等待某一事件的发生,当等待的事件发生以后,进程就会从阻塞状态到达就绪状态。当进程运行一段时间后,到达它能够持续运行的时间后(时间片),进程就会从运行状态变为就绪状态。Windows系统进程调度使用的是优先级调度,优先级高的就会优先运行。 线程的创建 线程类及其方法。VC中控制线程的类为CWinThread。 CWinThread类的可重载方法 线程优先级 工作线程 建立方式如下: UINT ThreadWork(LPVOID pParam){ …… return 0; } CWinThread* AfxBeginThread( //线程执行体函数指针 AFX_THREADPROC pfnThreadProc, LPVOID pParam, //向线程传递参数 //线程的优先级 int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, //线程所占堆栈的尺寸 DWORD dwCreateFlags = 0, //线程创建标志 //线程的安全结构 LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL) pfnThreadProc是函数指针,它指向静态或一个全局函数,而这个函数就是线程的执行体。 pParam是一个指针参数,它可以指向任何类型数据,如整数,句柄和结构体等。 nStackSize是线程运行时使用堆栈的空间,如果为0,就是默认值1M。1M的空间对于一般的线程已经足够大了。 dwCreateFlags : 指定创建线程以后,线程有怎么样的标志。可以指定两个值:: CREATE_SUSPENDED : 线程创建以后,会处于挂起状态,直到调用:ResumeThread 0:创建线程后就开始运行. lpSecurityAttrs:指向一个 SECURITY_ATTRIBUTES 的结构体,用它来标志新创建线程的安全性。如果为 NULL,那么新创建的线程就具有和主线程一样的安全性。 用户界面线程 使用向导可以生成用户界面线程。 生成对话框作为用户界面线程的界面。 建立用户界面线程 CWinThread* AfxBeginThread ( CRuntimeClass* pThreadClass, //用户界面线程 int nPriority = THREAD_PRIORITY_NORMAL, //优先级 UINT nStackSize = 0, //堆栈尺寸 DWORD dwCreateFlags = 0, //线程创建标志 LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL //线程的安全结构 ) 线程的挂起 调用SuspendThread函数用于将线程的挂起计数加1,当线程的挂起计数大于0时,该线程将暂停执行,称之为挂起状态。SuspendThread最好在线程内部调用,这样可以知道线程什么时候停止避免引起死锁。而死锁是线程进入阻塞状态后,永远也得不到执行的一种状态。SuspendThread的返回值是挂起的计数值。如果返回-1,就会意味着发生错误。 线程的恢复 调用消耗线程挂起的ResumeThread用于将线程的挂起计数减1,当线程的挂起计数等于0时,线程恢复执行。 在程序设计中一般不建议使用SuspendThread和ResumeThread实现线程的操作。只是在线程创建过程中需要完成某种初始化工作,首先使线程暂停操作,然后调用ResumeThread恢复线程的运行。 线程的终止 线程函数退出循环来返回 通过调用ExitThread 函数,线程将自行撤消 void ExitThread ( DW

文档评论(0)

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

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

1亿VIP精品文档

相关文档