- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c++多线程.ppt
第9章 多线程 9.1 创建线程 学习目标 调用AfxBeginThread()来启动线程。 程序的实现步骤 利用AppWizard生成程序框架(ThreadTest ) 编辑资源 添加菜单响应函数 编写线程函数 在视中输出信息 步骤1 生成程序框架(MenuTest) 项目名称: ThreadTest 选择单文档界面应用程序(Single document) 步骤2 编辑资源 1.编辑菜单资源 线程 Pop-up 选中 Caption ID 启动线程 ID_THREAD_START 其他任务 ID_TREEAD_OTHER 2.编辑对话框资源 步骤3 添加菜单响应函数 Class Name Objects IDs Messages CThreadTestView ID_THREAD_START COMMAND CThreadTestView ID_TREEAD_OTHER COMMAND 步骤4 编写线程函数 1. 在视类中添加两个成员变量。并在构造函数中初始化 步骤5 在视中输出信息 2. 线程函数 基本知识 CWnd类的GetSafeHwnd();返回窗口句柄 AfxBeginThread(); 线程函数 ( 返回UINT) CMainFrame::GetActiveView(); ::Sleep(1000); 9.2 线程间通信 学习目标 1. 使用全局变量实现线程间通信 2.使用消息实现线程间通信 3.使用CEvent类实现线程间通信 1. 使用全局变量实现线程间通信 在上一节程序的基础上,进行以下操作: (1)在“线程”菜单中添加菜单项: “终止线程”,ID_THREAD_STOP。 (2)在ThreadTestView.cpp文件中添加一个全局变量threadController,用来控制线程是否继续。添加方法是在ThreadTestView.cpp的最上面,在endif下面添加下面的语句: volatile int threadController; (3)在视类中为“停止线程”添加消息处理函数OnThreadStop ()。 1. 使用全局变量实现线程间通信 4.修改OnThreadStart ()函数,代码如下所示: 2.使用消息实现线程间通信 (1)在ThreadTestView.h文件中定义消息: const WM_THREAD_SENDMESS = WM_USER + 20; (2)在ThreadTestView.h文件中添加消息函数声明: afx_msg LRESULT OnThreadSendmess(WPARAM,LPARAM);(3)在ThreadTestView.cpp文件中添加消息映射: ON_MESSAGE(WM_THREAD_SENDMESS, OnThreadSendmess) (4)OnThreadSendmess()代码如下: 2.使用消息实现线程间通信 (5)修改ThreadProc()函数如下 : 基本知识 PostMessage((HWND)param, WM_THREAD_SENDMESS, 0, 0); 3.使用CEvent类实现线程间通信 (1)Event对象:有两种状态:通信状态和非通信状态 (2)创建一个CEvent类的对象很:CEvent threadStart; 他自动的处在未通信状态 (3)threadStart.SetEvent(); 使其处于通信状态 (4)调用WaitForSingleObject()来监视CEvent对象的: ::WaitForSingleObject(threadStart.m_hObject, INFINITE); 3.使用CEvent类实现线程间通信 在上一节程序的基础上,进行以下操作: (1)在ThreadTestView.cpp中:#include afxmt.h (2)在ThreadTestView.cpp中加上下列两个全局变量: CEvent threadStart; CEvent threadEnd; (3)修改ThreadProc()函数 (4)修改OnThreadStart ()函数中的内容。 (5)修改OnThreadStop ()函数中的内容。 (6)CThreadTestView添加WM_CREATE消息处理函数OnCreate()。 3.使用CEvent类实现线程间通信 3.使用CEvent类实现线程间通信 9.3 线程同步 学习目标 1. 使用Critical
文档评论(0)