static UINT WriteW(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit->SetWindowText("");
critical_secton.Lock();
for (int i=0;i<10;i++)
{
g_Array[i]='W';
pEdit->SetWindowText(g_Array);
Sleep(1000);
}
critical_secton.Unlock();
return 0;
}
void MTG8::OnBnClickedWritew()
{
CWinThread *pWriteW=AfxBeginThread(WriteW,&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
pWriteW->ResumeThread();
}
最近在學多執行緒,跟著做了幾個多執行緒的例子,之前這樣做都沒問題,到這個例子突然就出現這個問題了,程式錯在哪呢,網上搜到有說用靜態成員函式,我就在函式前面加個一個static,還是同樣的問題,求解
uj5u.com熱心網友回復:
AfxBeginThread(WriteW,(LPVOID)&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
uj5u.com熱心網友回復:
謝謝,樓上,我剛才試試了,還是彈出一樣的錯誤提示uj5u.com熱心網友回復:
還是一樣的錯誤
uj5u.com熱心網友回復:
把static去掉。然后函式定義跟執行緒要求的一樣
uj5u.com熱心網友回復:
先看函式定義:CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,
DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
CWinThread* AFXAPI AfxBeginThread(CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,
DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
m_ctrlW這個是控制元件指標還是控制元件物體,你確定一下。估計被識別成了第二種了
多執行緒使用AfxBeginThread,在執行緒中使用視窗控制元件會導致各種問題,不建議如此開發。
建議使用獨立的執行緒,采用訊息機制。
uj5u.com熱心網友回復:
AfxBeginThread(WriteW,(LPVOID)&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
還是一樣的錯誤
把static去掉。然后函式定義跟執行緒要求的一樣

這個也試了,還是一個問題,這是我函式的定義
uj5u.com熱心網友回復:
先看函式定義:
CWinThread* AFXAPI AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,
DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
CWinThread* AFXAPI AfxBeginThread(CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0,
DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
m_ctrlW這個是控制元件指標還是控制元件物體,你確定一下。估計被識別成了第二種了
多執行緒使用AfxBeginThread,在執行緒中使用視窗控制元件會導致各種問題,不建議如此開發。
建議使用獨立的執行緒,采用訊息機制。
m_ctrlW,是MFC編輯框的CEDIT變數
uj5u.com熱心網友回復:
m_ctrlW,是MFC編輯框的CEDIT變數
我知道這是一個CEDIT,你看這個是CEDIT是new出來的,還是直接定義的。
uj5u.com熱心網友回復:
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspxuj5u.com熱心網友回復:
m_ctrlW,是MFC編輯框的CEDIT變數
我知道這是一個CEDIT,你看這個是CEDIT是new出來的,還是直接定義的。
直接定義的
uj5u.com熱心網友回復:
m_ctrlW,是MFC編輯框的CEDIT變數
我知道這是一個CEDIT,你看這個是CEDIT是new出來的,還是直接定義的。
直接定義的
AfxBeginThread(WriteW,(LPVOID)&m_ctrlW)或者把引數補足為6位,要不然會被認為是第二種呼叫方式。,或者直接把這個dlg的指標傳過去,用this,反正你用的mfcthread。
執行緒內引數決議為:
MTG8 *dlg = (MTG8 *)pparam,這樣就能控制這個dlg內的所有可控控制元件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/118144.html
標籤:進程/線程/DLL
下一篇:MFC模擬登錄Https網站登錄
