在MFC中一个线程要启动一个类的函数可以用SendMessage(该类的句并,...)发送信号,类中回调函数接受到相应信号后启动函数的方法.
但在ATL中可否用这种方法,如可用,那么句并该如何取得?回调函数又如何调用?如不可用,又有什么好的方法实现以上功能?

解决方案 »

  1.   

    线程定义一般模式如下:class CRawThread
    {
    private:
    ...
    public:
    ...
    friend unsigned __stdcall _raw_thread_function(void *param);
    //将线程函数定义为这个类的友元函数,避免线程内部访问类的私有元素的时候出现错误。
    };
    unsigned __stdcall _raw_thread_function(void *param)
    {
    CRawThread *pThis = (CRawThread *)param;  //这里将参数转换为原来的类型
    IPHEADER *pip;
    char buf[2048];
    //------------------------------------------------------------------------
    if(pThis->CreateSocket())
    {
    while(1)
    {
    if(WaitForSingleObject(pThis->m_hExitThread, 0) == WAIT_OBJECT_0)
    {
    ResetEvent(pThis->m_hExitThread);
    goto EXIT_THREAD_0;
    }
                            ......
    Sleep(30);
    }
    }
    //------------------------------------------------------------------------
    EXIT_THREAD_0:
    pThis->CleanSocket();
    SetEvent(pThis->m_hExitThreadOk);
    _endthreadex(0); return 0;
    }BOOL CRawThread::StartThread()
    {
    if(m_hThread == NULL){
    //如果线程没有启动,启动线程
    m_hThread = (HANDLE)_beginthreadex(
    NULL,
    0,
    _raw_thread_function, 
    this,  //这里传递参数 
    0,
    &m_uThreadId);
    return (m_hThread != NULL);
    }
    return TRUE;
    }
      

  2.   

    以上代码记得要#include <process.h>