MFC中CreatThread()创建线程使用详解
2013-04-11 20:02
531 查看
今天详细研究了下CreateThread()函数创建线程,并将其包装使用的方法,现在给大家讲解下: MyThread.h //头文件 class MyThread; class ThreadCallback{ //线程回调类 public: virtual BOOL Run(MyThread* pCurThread)=0; }; class MyThread{ public: void Init(ThreadCallback*pi ){return m_pi = pi;} MyThread(); //析构函数 //..... BOOL Start(); //线程对象调用,创建线程 private: ThreadCallback* m_pi; private: static DWORD WINAPI ThreadProc(LPVOID lpParam); //线程函数 }; MyThread .cpp //实现类 MyThread::MyThread(){....} //初始化成员变量 BOOL MyThread::Start(){ //start函数 ... //外部在用MyThead对象调用Start()后便创建了线程 m_hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,this,0,(LPDWORD)&m_nThreadID); } DWORD WINAPI MyThread::ThreadProc(LPVOID lpParam){ MyThread* pthis = (MyThread*)lpParam; ASSERT(pthis&& pthis ->m_pi); BOOL bRun = pthis->m_pi->Run(pthis);//对象传入线程运行函数中,可以调用此对象结果中的其他成员 CloseHandle(pThis->m_nThread);//线程退出时关闭 。。。。 } 我想说的其实这是一种很高明的做法,首先我们定义的MyThread类其实就是一个封装了很多信息的类,其中有很多有用信息,比如说我可以定义控制线程退出的变量,线程句柄,线程ID,线程状态变量为此结构的成员变量,这样就可以很自然的监控线程状态。 以下在看看此创建的线程是如何被调用的 Cutter.h classCutter:public ThreadCallback{ //继承线程回调 public: Cutter(); //构造函数 proctected: virtual BOOL Run(MyThread*pCurThread);//线程回调覆盖 private: MyThread mThread; }; Cutter.cpp Cutter::Cutter(){ //构造 mThread.Init(this); //这个初始化调用的是MyThead类中的,初始化了MyThread对象中的m_pi; } 以上是相关的代码: 在Cutter.cpp中需要启动线程的地方这样调用 mThread.Start() ; 分析下过程吧:Start()===>CreatThread()===>ThreadProc()===>myThread->m_pi->Run(myThread); 就是这样的。这里调用的Run是Cutter里的,因为将基类中的Run给覆盖了,呵呵,其实还可以继续封装,凭个人的方法吧。
相关文章推荐
- MFC类内创建线程,使用内部变量方法
- 使用Thread类可以创建和控制线程
- 使用MFC中的AfxBeginThread创建多线程
- Java使用ThreadFactory来创建新的线程
- WPF中使用Free解决访问非UI线程创建的对象抛出的Thread异常
- MFC中使用线程创建窗口的问题
- mfc下AfxBeginThread创建线程
- java并发编程---如何创建线程以及Thread类的使用
- 猎豹MFC--进程和线程--创建线程AfxBeginThread() SetDlgItemInt()线程暂停继续终止
- 线程的创建之继承Thread类、线程的生命周期、线程常用的方法、currentThread方法详解
- MFC中 如何在类对象内部创建线程(AfxBeginThread())
- MFC中使用CreateThread创建线程
- [ACE程序员教程笔记]使用ACE_Thread创建多个线程
- MFC 线程创建在使用构造函数进行初始化线程的时候,创建线程实例了,但是线程并没有执行的问题
- MFC创建线程函数及参数的使用
- MFC之AfxbeginThread 线程 创建、挂起、释放、结束、退出
- C#基础:使用Thread创建线程
- C#基础:使用Thread创建线程
- 使用Thread类创建线程
- 使用java.util.concurrent.ThreadFactory来创建线程