我刚开始接触多线程开发,自己打算写一个最简单的练习一下这两天看书的成果,做了一个对话框程序,用户输入两个数字,点击按钮以后,启动两个线程,一个把这两个数字相加,一个把数字相减,在OnButton函数中启动线程
      CWinThread *p=AfxBeginThread(add,0);
      CWinThread *q=AfxBeginThread(sub,0);
编译提示错误C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (unsigned int,unsigned int)'这个错误是什么意思啊?
这是我的线程函数,
UINT CLianxi4Dlg::add(UINT m_Num1,UINT m_Num2)
{
   m_Add=m_Num1+m_Num2;
   return m_Add;
}
UINT CLianxi4Dlg::sub(UINT m_Num1,UINT m_Num2)
{
     m_Sub=m_Num1-m_Num2;
 return m_Sub;
}
我是很菜的菜鸟,刚开始学,各位前辈一定要救我,拉我一把啊!!谢谢大家了:)

解决方案 »

  1.   

    线程函数的定义必须为UINT MyThreadFunction( LPVOID pParam )的形式,该函数有且只有一个参数,并且该函数不能是类的成员函数。
    对于你的问题可以用如下方法解决:
    typedef stuct tagMyParamStruct
    {
       UINT m_nNum1;
       UINT m_nNum2;
       UINT m_nResult;
    }MyParamStruct;UINT add(MyParamStruct* p)
    {
      p->m_nResult = p->m_nNum1 + p->m_nNum2;
      return p->m_nResult;
    }UINT sub(MyParamStruct* p)
    {
      p->m_nResult = p->m_nNum1 - p->m_nNum2;
      return p->m_nResult;
    } MyParamStruct param;
     param.m_nNum1 = ?;
     param.m_nNum2 = ?; CWinThread *p=AfxBeginThread(add,&param);
     CWinThread *q=AfxBeginThread(sub,&param);大致过程是这样的,其他的一些内容看看msdn吧