作者Dong0129 (阿東)
看板C_and_CPP
標題[問題] MFC中Thread及MessageBox問題
時間Fri Jun 1 01:53:11 2018
各位版友好,
小弟是MFC新手,
最近在MFC上嘗試寫一個Thread讀檔案後透過呼叫寫好的函式處理檔案內容,
並能透過按鈕實現"暫停"及"繼續"的作用,
內容如下:
pthread = AfxBeginThread(test, s_path);
UINT TAB_Internal::test(LPVOID lpParam)
{
CString* file_path = (CString*) lpParam; //傳檔案路徑
processfile(*file_path); //程式中已宣告的函式
}
上述寫法並沒有通過編譯,
以下有幾點問題想請教...
1.在pthread = AfxBeginThread(test, s_path);顯示錯誤表示AfxBeginThread沒有使用
正確引數,請問我該怎麼寫才是正確的呢?
2.在學習相關的知識時有看到AfxBeginThread的原型如下,
CWinThread* AFXAPI AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority,
UINT nStackSize,
DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs)
想請問其中各個參數的作用是什麼(查到的資料有說明,但不是很清楚),
是否每次使用AfxBeginThread時,都需要填滿這些參數呢?
3.先前在JAVA上實作Thread時,Thread的"暫停"以及"繼續"需要自己實作,並沒有函式可
直接呼叫,請問在MFC上也需要自己實做嗎?還是透過thread->suspend();
以及thread->resume();就能夠暫停以及繼續Thread呢?
4.請問MessageBox("mb內容","mb標題",mb_btn);中,mb_btn能夠自行填入自己定義的按
鈕
嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.182.240
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527789193.A.93A.html
推 kingofsdtw: 傳入null ?06/01 04:01
→ kingofsdtw: 傳入 bool stop06/01 04:02
→ lightyen: MFC過時很久都快化成灰了 連軟軟自己都不推06/01 09:31
→ lightyen: 想學習的話不如直接學windows api 例如CreateWindow()06/01 09:34
嗚嗚,我知道現在都用WPF或其他的語言寫啊,先前就聽過MFC很舊很麻煩,但因為工作需
要不得不碰,只好硬著頭皮面對它了。
※ 編輯: Dong0129 (42.73.61.214), 06/01/2018 10:00:32
→ flighteagle: s_path -> (LPVPID)pPath06/01 15:22
→ flighteagle: 原型寫了LPVOID pParam, 當然不能硬塞CString06/01 15:25
嗯嗯,謝謝指教,
也有試過不要傳值,
thread=AfxBeginThread(test,NULL);
還是沒辦法順利編譯過,一樣會提示沒有使用正確引數,傷腦筋。
※ 編輯: Dong0129 (42.73.61.214), 06/01/2018 16:13:32
→ flighteagle: 不傳值 可以用(LPVOID)this, 把dialog丟進去 06/01 17:30
→ flighteagle: test裡面, 可以試著把this還原 06/01 18:16
→ flighteagle: 另外, 使用正確引數, 應該會顯示哪個參數錯誤吧 06/01 18:17
→ flighteagle: .h -> static UINT test(LPVOID pParam); 06/01 18:23
→ flighteagle: .cpp -> UINT Dlg::test(LPVOID pParam) {return 0;} 06/01 18:24
→ flighteagle: AfxBeginThread(test, NULL); 06/01 18:25