概述
线程分工作线程和界面线程 ,MFC对线程的封装是由CWinThread类实现的。
一.工作线程的创建:
CWinThread* pThread =AfxBeginThread(WorkThreadFunction,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
/ 其中WorkThreadFunction为线程函数,而在界面线程创建中第一参数为 CThreadApp(自定义的界面线程类)。 this为创建的线程函数需要的参数,这里传入的是主窗口对象的指针。 函数返回值是新创建的线程对象指针(即 pThread 指向新创建的线程)
m_ThreadList.SetAt(pThread->m_hThread,pThread); //m_hThread 为线程对象关联的线程句柄,将线程对象及其句柄放入容器里
pThread->ResumeThread();
二,界面线程的创建:这里在主窗口中设置一个创建按钮,在按钮函数里创建一个界面线程,在这个界面线程函数里在弹出一个自定义的对话框
1,在资源视图中添加一个对话框资源,用于界面线程创建后的窗口显示。
然后为新建的对话框添加类 名为CBookInfo, 继承于 class CBookInfo : public CDialogEx
2.从CThreadApp类派生一个子类 CThreadApp (界面线程类) ,在这个子类的InitInstance()中,实例化一个步骤1创建的对话框类
BOOL CThreadApp::InitInstance()
{
// TODO: 在此执行任意逐线程初始化
CBookInfo dlg;
//m_pMainWnd = &dlg;
dlg.DoModal ();
return TRUE;
}
3.在主对话框中定义个CMapPtrToPtr对象 m_ThreadList ,这个容器用于线程的退出时的管理
4.通过按钮创建界面线程。
void Cmfc_ThreadCreatDlg::OnBnClickedButtonInterface()
{
// TODO: 在此添加控件通知处理程序代码
CWinThread* pThread = AfxBeginThread(RUNTIME_CLASS(CThreadApp),THREAD_PRIORITY_NORMAL,0,0,NULL);
// 其中RUNTIME_CLASS(CThreadApp)为界面线程类, 函数返回一个创建好的界面线程对象,并赋给pThread , (在创建这个对象的初始化中,会弹出窗口)
m_ThreadList.SetAt(pThread->m_hThread,pThread);
}
最后
以上就是谨慎哑铃为你收集整理的MFC创建线程(工作线程和界面线程)的全部内容,希望文章能够帮你解决MFC创建线程(工作线程和界面线程)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复