创建线程时出现 error C3867:“MTG8::WriteW”函数调用缺少参数列表;请使用“&MTG8::WriteW”创建指向成员的指针

lionhenryzxxy 2016-11-23 03:56:45
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,还是同样的问题,求解
...全文
780 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nudt312 2016-11-25
  • 打赏
  • 举报
回复
引用 10 楼 lionhenryzxxy 的回复:
[quote=引用 8 楼 nudt312 的回复:] [quote=引用 7 楼 lionhenryzxxy 的回复:] m_ctrlW,是MFC编辑框的CEDIT变量
我知道这是一个CEDIT,你看这个是CEDIT是new出来的,还是直接定义的。[/quote] 直接定义的[/quote] AfxBeginThread(WriteW,(LPVOID)&m_ctrlW)或者把参数补足为6位,要不然会被认为是第二种调用方式。,或者直接把这个dlg的指针传过去,用this,反正你用的mfcthread。 线程内参数解析为: MTG8 *dlg = (MTG8 *)pparam,这样就能控制这个dlg内的所有可控控件。
赵4老师 2016-11-24
  • 打赏
  • 举报
回复
Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
nudt312 2016-11-24
  • 打赏
  • 举报
回复
引用 7 楼 lionhenryzxxy 的回复:
m_ctrlW,是MFC编辑框的CEDIT变量
我知道这是一个CEDIT,你看这个是CEDIT是new出来的,还是直接定义的。
lionhenryzxxy 2016-11-24
  • 打赏
  • 举报
回复
引用 5 楼 nudt312 的回复:
先看函数定义: 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变量
lionhenryzxxy 2016-11-24
  • 打赏
  • 举报
回复
引用 4 楼 oyljerry 的回复:
[quote=引用 3 楼 lionhenryzxxy的回复:][quote=引用 1 楼 oyljerry 的回复:]

AfxBeginThread(WriteW,(LPVOID)&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

还是一样的错误[/quote]
把static去掉。然后函数定义跟线程要求的一样[/quote]

这个也试了,还是一个问题,这是我函数的定义
lionhenryzxxy 2016-11-24
  • 打赏
  • 举报
回复
引用 8 楼 nudt312 的回复:
[quote=引用 7 楼 lionhenryzxxy 的回复:]
m_ctrlW,是MFC编辑框的CEDIT变量


我知道这是一个CEDIT,你看这个是CEDIT是new出来的,还是直接定义的。[/quote]
直接定义的
nudt312 2016-11-23
  • 打赏
  • 举报
回复
先看函数定义: 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,在线程中使用窗口控件会导致各种问题,不建议如此开发。 建议使用独立的线程,采用消息机制。
oyljerry 2016-11-23
  • 打赏
  • 举报
回复
引用 3 楼 lionhenryzxxy的回复:
[quote=引用 1 楼 oyljerry 的回复:]

AfxBeginThread(WriteW,(LPVOID)&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

还是一样的错误[/quote] 把static去掉。然后函数定义跟线程要求的一样
lionhenryzxxy 2016-11-23
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:

AfxBeginThread(WriteW,(LPVOID)&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

还是一样的错误
lionhenryzxxy 2016-11-23
  • 打赏
  • 举报
回复
谢谢,楼上,我刚才试试了,还是弹出一样的错误提示
oyljerry 2016-11-23
  • 打赏
  • 举报
回复

AfxBeginThread(WriteW,(LPVOID)&m_ctrlW,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧