各位大侠:
    我用VC6.0写的串口通讯程序,想把负责读写程序的线程当做类的一个成员函数以方便管理,结果编译通不过,代码如下,各位大侠帮忙啊,小弟新手。
DWORD WINAPI TComm_Operate::CommPortWorkThread(LPVOID pParam)     //传送数据工作者线程
{
while (TRUE)
{
if (WaitForSingleObject(m_TransEvent, 1000) == WAIT_OBJECT_0)
{
_try
{
m_Running = TRUE;
//发送数据
if (!Write((char *)m_SendBuff, m_SendLeng))
continue;
//接收数据
if (!Read((char *)m_RecvBuff, m_RecvLeng))
continue;
//置位传送数据完成事件句柄
SetEvent(m_TranOverEvent);
}
_finally
{
m_Running = FALSE;
}
}
}
return 0;
}void TComm_Operate::StartServer()
{
  m_TransThread = CreateThread(NULL,0,CommPortWorkThread,this,0,NULL);
}结果在
     m_TransThread = CreateThread(NULL,0,CommPortWorkThread,this,0,NULL);有问题,
提示error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
                    各位大侠帮忙啊,在线等

解决方案 »

  1.   

    头文件中是否声明为静态函数,如这样:
     static DWORD WINAPI CommPortWorkThread(LPVOID   pParam);MFC程序推荐不用CreateThread而用AfxBeginThread 来建立线程,这样函数可以声明为
     static UINT CommPortWorkThread( LPVOID pParam );
    实现为
     CWinThread* pThread = AfxBeginThread(CommPortWorkThread, this);
    当然pThread作为成员变量更利于其他地方使用。
      

  2.   

    static DWORD   WINAPI   TComm_Operate::CommPortWorkThread(LPVOID   pParam)
    {
      TComm_Operate* pThis = (TComm_Operate*)pParam;
      while (TRUE) 
      { 
      if   (WaitForSingleObject(pThis->m_TransEvent,   1000)   ==   WAIT_OBJECT_0) 
      { 
        _try 
        { 
          pThis->m_Running   =   TRUE; 
          //发送数据 
          if   (!Write((char   *)pThis->m_SendBuff,   pThis->m_SendLeng)) 
            continue; 
          //接收数据 
          if   (!Read((char   *)pThis->m_RecvBuff,   pThis->m_RecvLeng)) 
            continue; 
          //置位传送数据完成事件句柄 
          SetEvent(pThis->m_TranOverEvent); 
        } 
        _finally 
        { 
          pThis->m_Running   =   FALSE; 
        } 
      } 
      } 
      return   0; 
    }
      

  3.   

    TComm_Operate*   pThis   =   (TComm_Operate*)pParam; 是什么意思啊,为什么要加pParam?pParam有什么作用?
      

  4.   

    你创建线程的时候传递了一个this参数,这个参数就是线程函数的参数 LPVOID pParam,所以这里你能转换成TComm_Operate*。
    因为线程函数必须是静态函数,静态函数没有this可用,所以只能当作参数传递“this”进来