欢迎来到天天文库
浏览记录
ID:46920094
大小:229.66 KB
页数:42页
时间:2019-11-30
《线程的编程实现(操作系统》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章多线程返回目录内容摘要:创建线程实现线程间通信利用线程同步技术保障数据安全9.1创建线程学习目标调用AfxBeginThread()来启动线程。9.1返回第9章程序的实现步骤利用AppWizard生成程序框架(ThreadTest)编辑资源添加菜单响应函数编写线程函数在视中输出信息9.1步骤1生成程序框架(MenuTest)项目名称:ThreadTest选择单文档界面应用程序(Singledocument)9.1步骤2编辑资源1.编辑菜单资源线程Pop-up选中CaptionID启动线程ID_THREAD_START其他任务ID_TREEAD_OTHER2.编辑对话框资源9.1
2、IDD_DIALOG_THRAEDCDlgThread步骤3添加菜单响应函数ClassNameObjectsIDsMessagesCThreadTestViewID_THREAD_STARTCOMMANDCThreadTestViewID_TREEAD_OTHERCOMMAND9.1voidCThreadTestView::OnThreadStart(){HWNDhWnd=GetSafeHwnd();AfxBeginThread(TreadProc,hWnd,THREAD_PRIORITY_NORMAL);}voidCThreadTestView::OnThraedOther(){C
3、DlgThreaddlg;dlg.DoModal();}步骤4编写线程函数1.在视类中添加两个成员变量。并在构造函数中初始化9.1classCThreadTestView:publicCView{……public:CStringm_strMessage;intm_iTime;……}CThreadTestView::CThreadTestView(){m_strMessage="没有线程启动";m_iTime=0;}步骤5在视中输出信息9.1voidCThreadTestView::OnDraw(CDC*pDC){CThreadTestDoc*pDoc=GetDocument();AS
4、SERT_VALID(pDoc);//TODO:adddrawcodefornativedataherecharchNumber[6];itoa(m_iTime,chNumber,10);pDC->TextOut(30,30,m_strMessage);pDC->TextOut(30,50,chNumber);}2.线程函数9.1UINTTreadProc(LPVOIDparam){CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp();CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd()
5、;CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView();pView->m_strMessage="启动了一个线程!";while(pView->m_iTime<20){::Sleep(1000);pView->m_iTime++;pView->Invalidate();}pView->m_iTime=0;pView->m_strMessage="线程结束!";return0;}基本知识CWnd类的GetSafeHwnd();返回窗口句柄AfxBeginThread();线程函数(返回UINT)CMain
6、Frame::GetActiveView();::Sleep(1000);9.19.2线程间通信学习目标1.使用全局变量实现线程间通信2.使用消息实现线程间通信3.使用CEvent类实现线程间通信9.2返回第9章1.使用全局变量实现线程间通信在上一节程序的基础上,进行以下操作:(1)在“线程”菜单中添加菜单项:“终止线程”,ID_THREAD_STOP。(2)在ThreadTestView.cpp文件中添加一个全局变量threadController,用来控制线程是否继续。添加方法是在ThreadTestView.cpp的最上面,在endif下面添加下面的语句:volatileint
7、threadController;(3)在视类中为“停止线程”添加消息处理函数OnThreadStop()。9.2voidCThreadTestView::OnThreadStop(){threadController=0;}1.使用全局变量实现线程间通信4.修改OnThreadStart()函数,代码如下所示:9.2voidCThreadView::OnStartthread(){threadController=1;HWNDhWnd=GetSafeHw
此文档下载收益归作者所有