文档详情

MFC的多线程.pdf

发布:2017-05-27约2.41万字共19页下载文档
文本预览下载声明
深入浅出深入浅出Win32多线程设计之多线程设计之MFC的多线程的多线程 2006-01-19 14:08 作者:宋宝华 出处:天极开发 责任编辑:方舟   1 、创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版 本,分别对应工作者线程和用户接口(UI)线程。 工作者线程 CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数 int nPriority = THREAD_PRIORITY_NORMAL, //线程的优先级 UINT nStackSize = 0, //线程的堆栈大小 DWORD dwCreateFlags = 0, //线程的创建标志 LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL //线程的安全属性 ); 工作者线程编程较为简单,只需编写线程控制函数和启动线程即可。下面的代码给出了定义一个控制函 数和启动它的过程: //线程控制函数 UINT MfcThreadProc(LPVOID lpParam) { CExampleClass *lpObject = (CExampleClass*)lpParam; if (lpObject == NULL || !lpObject- IsKindof(RUNTIME_CLASS(CExampleClass))) return - 1; //输入参数非法 //线程成功启动 while (1) { ...// } return 0; } //在MFC程序中启动线程 AfxBeginThread(MfcThreadProc, lpObject); UI线程 创建用户界面线程时,必须首先从CWinThread 派生类,并使用 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 宏声明此类。 下面给出了CWinThread类的原型(添加了关于其重要函数功能和是否需要被继承类重载的注释): class CWinThread : public CCmdTarget { DECLARE_DYNAMIC(CWinThread) public: // Constructors CWinThread(); BOOL CreateThread(DWORD dwCreateFlags = 0, UINT nStackSize = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL); // Attributes CWnd* m_pMainWnd; // main window (usually same AfxGetApp()- m_pMainWnd) CWnd* m_pActiveWnd; // active main window (may not be m_pMainWnd) BOOL m_bAutoDelete; // enables delete this after thread termination // only valid while running HANDLE m_hThread; // this threads HANDLE operator HANDLE() const; DWORD m_nThreadID; // this threads ID int GetThreadPriority(); BOOL SetThreadPriority(int nPriority); // Operations DWORD SuspendThread(); DWORD ResumeThread(); BOOL PostThreadMessage(UINT message, WPARAM wParam, LPARAM lParam); // Overridables //执行线程实例初始化,必须重写 virtual BOOL InitInstance(); // running and idle processing //控制线程的函数,包含消息泵,一般不重写 vi
显示全部
相似文档