mfc 创建线程函数AfxBeginThread,线程中访问mfc控件
轉字http://blog.csdn.net/guomsh/article/details/10377993
1. C++ 中如何定義線程函數
? ? ?有兩種方法:a. 定義線程函數為全局函數 ? ?b. 定義線程函數為類的靜態成員函數
2. C++中的線程函數如何訪問類中的成員變量
? ? 針對線程函數為類的靜態成員進行說明。如果是靜態數據成員,當然可以直接訪問,但是如果要訪問非靜態數據成員,直接訪問是做不到的。如果要想在線程函數中訪問和操作類的非靜態成員變量,可以把線程函數作為一個適配器,在適配器中調用類的非靜態成員函數。例如:
class CMyClass
{
public:
? ? void TestFunc();
? ? static int ThreadFunc(LPVOID pParam);// Adapter
protected:
? ? int ThreadFuncKernal();// Kernal
}
void CMyClass::TestFunc()
? ?{
? ? ? ? AfxBeginThread(TreadFunc, this);
? ?}
? ?// Thread function Adapter
? ?int CMyClass::ThreadFunc(LPVOID pParam) //這個是線程,聲明時使用static關鍵字 ,不能訪問控件
? ?{
? ? ? ?CMyClass *pObj = (CMyClass *)pParam;
? ? ? ?return pObj->ThreadFuncKernal();
? ?}
? ?// Thread function kernal
? ?int CMyClass::ThreadFuncKernal() //在這里可以訪問mfc的控件
? ?{
? ? ? ?while(1)
? ? ? ?{
? ? ? ? ? ?// my thread
? ? ? ? ? ?// to control class non-static member
? ? ? ?}
? ? ? ?return 0;
? ?}
總結
以上是生活随笔為你收集整理的mfc 创建线程函数AfxBeginThread,线程中访问mfc控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC线程创建运行关闭的问题
- 下一篇: POC问题汇总