作者:
Dong0129 (阿東跟上面講的情況一樣b)
2018-06-01 01:53:11各位版友好,
小弟是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能夠自行填入自己定義的按
鈕
嗎?
作者: lightyen (lightyen) 2018-06-01 09:31:00
MFC過時很久都快化成灰了 連軟軟自己都不推想學習的話不如直接學windows api 例如CreateWindow()
s_path -> (LPVPID)pPath原型寫了LPVOID pParam, 當然不能硬塞CString不傳值 可以用(LPVOID)this, 把dialog丟進去test裡面, 可以試著把this還原另外, 使用正確引數, 應該會顯示哪個參數錯誤吧.h -> static UINT test(LPVOID pParam);.cpp -> UINT Dlg::test(LPVOID pParam) {return 0;}AfxBeginThread(test, NULL);