作者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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1527789193.A.93A.html
1F:推 kingofsdtw: 传入null ?06/01 04:01
2F:→ kingofsdtw: 传入 bool stop06/01 04:02
3F:→ lightyen: MFC过时很久都快化成灰了 连软软自己都不推06/01 09:31
4F:→ lightyen: 想学习的话不如直接学windows api 例如CreateWindow()06/01 09:34
呜呜,我知道现在都用WPF或其他的语言写啊,先前就听过MFC很旧很麻烦,但因为工作需
要不得不碰,只好硬着头皮面对它了。
※ 编辑: Dong0129 (42.73.61.214), 06/01/2018 10:00:32
5F:→ flighteagle: s_path -> (LPVPID)pPath06/01 15:22
6F:→ flighteagle: 原型写了LPVOID pParam, 当然不能硬塞CString06/01 15:25
嗯嗯,谢谢指教,
也有试过不要传值,
thread=AfxBeginThread(test,NULL);
还是没办法顺利编译过,一样会提示没有使用正确引数,伤脑筋。
※ 编辑: Dong0129 (42.73.61.214), 06/01/2018 16:13:32
7F:→ flighteagle: 不传值 可以用(LPVOID)this, 把dialog丢进去 06/01 17:30
8F:→ flighteagle: test里面, 可以试着把this还原 06/01 18:16
9F:→ flighteagle: 另外, 使用正确引数, 应该会显示哪个参数错误吧 06/01 18:17
10F:→ flighteagle: .h -> static UINT test(LPVOID pParam); 06/01 18:23
11F:→ flighteagle: .cpp -> UINT Dlg::test(LPVOID pParam) {return 0;} 06/01 18:24
12F:→ flighteagle: AfxBeginThread(test, NULL); 06/01 18:25