9.2 92线程间通信 学习目标 1.使用全局变量实现线程间通信 2.使用消息实现线程间通信 3使用 CEvent类实现线程间通信
9.2 线程间通信 学习目标 1. 使用全局变量实现线程间通信 2.使用消息实现线程间通信 3.使用CEvent类实现线程间通信 9.2 返回第9章
9.2 1.使用全局变量实现线程间通信 在上一节程序的基础上,进行以下操作: (1)在“线程”菜单中添加菜单项:“终止线程”, ID THREAD STOP。 (2)在 Thread Test view.cpp文件中添加一个全局变量 thread Controller,用来控 制线程是否继续。添加方法是在 Thread Test view. cpp的最上面,在 endif 下面添加下面的语句: volatile int thread Controller (3)在视类中为“停止线程”添加消息处理函数 On ThreadStop() void CThread TestView: On ThreadStopo thread Controller=0
1. 使用全局变量实现线程间通信 在上一节程序的基础上,进行以下操作: (1)在“线程”菜单中添加菜单项:“终止线程” ,ID_THREAD_STOP。 (2)在ThreadTestView.cpp文件中添加一个全局变量threadController,用来控 制线程是否继续。添加方法是在ThreadTestView.cpp的最上面,在endif 下面添加下面的语句: volatile int threadController; (3)在视类中为“停止线程”添加消息处理函数OnThreadStop()。 9.2 void CThreadTestView::OnThreadStop() { threadController = 0; }
9.2 1.使用全局变量实现线程间通信 4.修改 On ThreadStart()函数,代码如下所示 void C Threadview: On Startthread( threadController 1 HWND hWnd = GetSafeHwndo Afx Begin Thread(TreadProc, hWnd, THREAD PRIORITY NORMAL) 5.修改 Thread proc()函数的代码,代码如下
1. 使用全局变量实现线程间通信 4.修改OnThreadStart ()函数,代码如下所示: 9.2 void CThreadView::OnStartthread() { threadController = 1; HWND hWnd = GetSafeHwnd(); AfxBeginThread(TreadProc, hWnd, THREAD_PRIORITY_NORMAL); } 5.修改ThreadProc()函数的代码,代码如下:
9.2 UINT TreadProc(LPVOID param) CThreadTestApp *pApp=(C Thread TestApp *)AfXGetAppo CMainFrame *pMainFrame =(CMain Frame *)pApp->Get MainWndo CThreadTestview *pView =(CThreadTestview *)pMainFrame->GetActive View pVeW> m strMessage="启动了一个线程!" while(threadcontroller Sleep(1000); pView->m iTime ++ pView->Invalidate pView->m iTime =0 pVeW> m strMessage="线程结束!"; return o
9.2 UINT TreadProc(LPVOID param) { CThreadTestApp *pApp=(CThreadTestApp *) AfxGetApp(); CMainFrame *pMainFrame = (CMainFrame *)pApp->GetMainWnd(); CThreadTestView *pView = (CThreadTestView *) pMainFrame->GetActiveView(); pView->m_strMessage = "启动了一个线程!"; while(threadController) { ::Sleep(1000); pView->m_iTime ++; pView->Invalidate(); } pView->m_iTime =0; pView->m_strMessage = "线程结束!"; return 0; }