C++,在线程中调用类的成员函数,为何数据偶尔会出错,偶尔就是对的

C++,在线程中调用类的成员函数,为什么数据偶尔会出错,偶尔就是对的?
线程是在这里面创建的
void CSocketThread::CreateSocketThread()
{
   m_hThread = (HANDLE)_beginthreadex(NULL,0,ClientThread,this,0,NULL);
  Sleep(1000);
  if (m_hThread == NULL)//如果线程创建失败
   {   
   printf("创建线程失败:%d\n",WSAGetLastError());
    }
}
unsigned int  WINAPI ClientThread(LPVOID lpParam)
{
  CSocketThread *pSocketThread = (CSocketThread*)lpParam;//这里转换的时候显示成员变量的值不变
        CMainWin *pMainWin = pSocketThread->Get_pMainWin();//偶尔出错
        ECOMMUNICATETYPE eKind = pSocketThread->Get_eCommunicateType();////偶尔出错
        char* chrRecBuffer = pSocketThread->GetRevBuf();//偶尔出错
}
C++线程,成员函数

------解决方案--------------------
MFC 不是很适合多线程,MFC不是多线程安全的。
1)需要加锁
2)需要重构。
   那些和界面相关的东西,不适宜用在线程里;
   包括 SetWindowText 等使用SendMessage的函数,和一些类似的API。

3)界面线程,不适合长期锁住,或者Sleep 。
界面线程无论是,Sleep,还是加锁,都可能会影响界面刷新。