void CMFC_TaskingDoc::SuspendSpinner(int nIndex, BOOL bSuspend)
{
if (!bSuspend)
{
if (m_pSpinThread[nIndex])
{
HANDLE hThread=m_pSpinThread[nIndex]->m_hThread;
::WaitForSingleObject(hThread,INFINITE);
}
}
else
{
int iSpnr;
switch(nIndex)
{
case 0:
iSpnr=1;
break;
case 1:
iSpnr=3;
break;
}
m_pSpinThread[nIndex]=AfxBeginThread(ThreadFunc,(LPVOID)&m_cSpin[iSpnr]);////////这局有错误!说是第一个参数传递错误!
}}UINT CMFC_TaskingDoc::ThreadFunc(LPVOID pParam)
{
CSpinner *lpSpin=(CSpinner*)pParam;
BOOL *pbContinue=lpSpin->GetContinue();
while (*pbContinue)
{
lpSpin->Draw();
}
return 0;
}
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
请问为什么啊?还有怎么解决?顺便问一下!如果把SuspendSpinner 加上static 也会有5个错误为什么啊?谢谢!

解决方案 »

  1.   

    在每个参数前加上(AFX_THREADPROC)即:
    AfxBeginThread((AFX_THREADPROC)ThreadFunc,(LPVOID)&m_cSpin)
      

  2.   

    DWORD dwThreadId, dwThrdParam = 1;
    hReadThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TheardEvent, &dwThrdParam, 0, &dwThreadId);
      

  3.   

    线程函数要是全局函数或静态成员函数,你的UINT CMFC_TaskingDoc::ThreadFunc要声明为static。静态成员函数只能用静态成员,如果SuspendSpinner加了static,m_pSpinThread等也要为static。
      

  4.   

    那m_pSpinThread[nIndex]=AfxBeginThread(ThreadFunc,(LPVOID)&m_cSpin[iSpnr]);
    这句为什么错了啊?