请问如何在MFC应用程序中创建一个子线程。

解决方案 »

  1.   

    我现在有一个函数:
    UINT Sends(LPVOID pParam);然后通过一下方式在CDialog类中创建一个子线程:
    AfxBeginThread(m_pServerSocket->m_pClientSocketList->Sends,NULL);但是在编译的时候总是会提示这样的错误:
    error C3867: “CClientSocketList::Sends”: 函数调用缺少参数列表;请使用“&CClientSocketList::Sends”创建指向成员的指针请问这是什么原因?
      

  2.   

    AfxBeginThread要求传递的线程函数是全局或静态成员的, 一般的成员函数不行.如果Send是CClientSocketList的静态成员, &CClientSocketList::Send就应该可以了.
      

  3.   

    改成 static UINT Sends(LPVOID pParam);
      

  4.   


    // 比如这是你的类
    class CClientSocketList
    {
        .....public:
       static UINT Sends(...//这里是参数);  // 给Sends加一个static关键字
    };但使用static方法后, static是属于类CClientSocketList的, 而不是属于CClientSocketList的某个特定实例的, 因此你可能需要将CClientSocketList, 作为lpVoid的线程参数传入全局函数, 就是普通的函数.
      

  5.   

    写错了: 因此你可能需要将CClientSocketList的一个对象实例
      

  6.   

    static UINT CClientSocketList::Sends(LPVOID pParam)
    {
    }定义时我是这样写的。可是提持示下面这样的错误。
    error C2724: “CClientSocketList::Sends”: “static”不应在文件范围内定义的成员函数上使用
    这是什么原因呢。
      

  7.   

    把static去掉呢? 在声明时使用static, 在定义实现该函数时不用staticUINT CClientSocketList::Sends(LPVOID pParam)
    {.....}
      

  8.   

    如何我按照楼上的方法定义后,那么在AfxBeginThread函数我该如何引用Sends函数呢