线程的创建,大家帮忙看看,是什么原因

clinic 2005-04-03 08:11:50
BOOL bend=FALSE;
UINT CThreDlg::ThreadFunction(LPVOID pParam)
{
while(!bend){
Beep(100,100);
Sleep(1000);
}
return 0;
}

CWinThread *pThread;
HWND hWnd;

BOOL CThreDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
hWnd = GetSafeHwnd();
pThread = AfxBeginThread(ThreadFunction, hWnd);
pThread->m_bAutoDelete = FALSE;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

void CThreDlg::OnCancel()
{
// TODO: Add your control notification handler code here
bend=TRUE;//改变变量,线程结束
WaitForSingleObject(pThread->m_hThread,INFINITE);//等待线程结束
delete pThread;//删除线程
}

编译不通过:

error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'

找半天找不出来,郁闷了...
...全文
52 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
clinic 2005-04-03
  • 打赏
  • 举报
回复
我把函数改成静态的,好了

谢谢!~~~
晨星 2005-04-03
  • 打赏
  • 举报
回复
至于为什么必须是静态的,因为AfxBeginThread函数的原型声明中所声明的就不是类的成员函数,注意类的非静态成员函数和一般的函数在调用机制上就不一样(多一个隐含的this指针参数),所以,无法把一个类的成员函数赋给一个一般的函数指针。
晨星 2005-04-03
  • 打赏
  • 举报
回复
线程函数必须是静态的,如果要访问类的成员,可以把对象的this指针传给线程函数的void指针参数,到函数内部再使用指针转换恢复出本来的类型。
晨星 2005-04-03
  • 打赏
  • 举报
回复
线程函数是静态的么?

15,471

社区成员

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

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