struct message 
{
unsigned  int age; 
unsigned  int workcode;
unsigned  int reg;
char username[32];
unsigned  int datalen;
char data[100];
} ;
DWORD  WINAPI CKaiDlg::RecvProc(LPVOID lpParam)
{
CKaiDlg *pCKaiDlg=(CKaiDlg*)(lpParam);
struct message recvmsg,*pRecvmsg = NULL;                 
////////////
char   *pPostmsgbuf  ;
pPostmsgbuf =  new   char[200];  
        
while(1)
{
memset(pPostmsgbuf, 0, sizeof(pPostmsgbuf));
recvfrom(pCKaiDlg->sockClient,pPostmsgbuf,100,0,(SOCKADDR*)&(pCKaiDlg->addrSrv),&(pCKaiDlg->len));
memcpy(&recvmsg,pPostmsgbuf, sizeof(pPostmsgbuf));

::PostMessage(::FindWindow(NULL,"客户信息显示"),WM_YOURMSG,(WPARAM)pPostmsgbuf,NULL);

}
delete []pPostmsgbuf;
pCKaiDlg->m_Set.Close();
return 0;
}//////////////////////////////////////////////////////////////////
   LRESULT CKaiDlg::OnYourMsg(WPARAM wp, LPARAM lp)
{
int getdotleft;
        char *handlebuf = new char[200];
handlebuf =( char *)wp;
memset(&handlebuf,0,sizeof(handlebuf));//
struct message handlemsg;
memcpy(&handlemsg, handlebuf, sizeof(handlebuf));// ////////////////
                  
delete []handlebuf;
return 0;
}

解决方案 »

  1.   

    改成SendMessage试试,PostMessage发送消息后马上返回,而后面处理消息的函数没有和线程同步机制,可能造成内存错误。其实,看你的代码好像FindWindow就是查找CKaiDlg自身,那么可以直接调用函数处理,没必要发消息啊,比如:
    pCKaiDlg->OnYourMsg(pPostmsgbuf, NULL);
    而且,你的内存那么多分配和拷贝也没有必要,比如recvfrom的参数直接用&recvmsg接收不就可以了?