看板 C_and_CPP 關於我們 聯絡資訊
各位版友好, 小弟是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