在这个程序中,创建了一个现场专门用来接收消息。接收消息的函数为
     DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;   
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
//这里他是定义了一个结构体 把socket 和 对话框的句柄封装起来一起传进来
delete lpParameter; //视频讲述时,遗忘了释放内存的操作。sunxin SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR); char recvBuf[200];
char tempBuf[300];
int retval;
while(TRUE)
{
retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR==retval)
break;
sprintf(tempBuf,"%s说: %s",inet_ntoa(addrFrom.sin_addr),recvBuf);
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);
}
return 0;
}
问题 :1  既然对话框的句柄已经知道了。。为什么不直接用hwnd->SetDlgItemText()来设置编辑框的内容 而是用postMessage传递消息给对话框,然后用对话框的消息响应函数来设置编辑框的内容?
       2  线程函数的标准形式 MSDN给出的如下
DWORD WINAPI ThreadProc(
  LPVOID lpParameter   // thread data
);
        请问 是不是用户只能改变函数名? 参数和返回值都必须和上面的一致?
        因为,我把参数的名字改成了lpParam 然后在函数中 delete lpParam 就报错。。这是为什么呢?
注:这个函数是dialog类的静态成员函数!
        可能问题描述的不清楚,希望有看过孙鑫老师的深入详解的人能帮助帮助
        3qverymuch

解决方案 »

  1.   

    delete lpParameter; //视频讲述时,遗忘了释放内存的操作。sunxin
    =======================================================
    给线程传的参数一般分配在堆上的,供线程整个运行期用的,线程退出时释放。为什么不直接用hwnd->SetDlgItemText()来设置编辑框的内容 而是用postMessage
    ====================================
    工作线程一般不直接操作界面,工作线程与UI线程通信用消息。原理你google吧。
      

  2.   

    1:他用传递消息的方式,在消息响应函数里面不只是可以设置编辑框的内容,还可以加入其它操作,方便以后的修改。
    2:delete lpParam 会报错是因为不知道指针类型吧,delete (RECVPARAM*)lpParam试试
      

  3.   

    1.可以的 ::SetDlgItemText();
    2,参数名可以改类型要一样,delete与new对应。。
      

  4.   

    参数是可以更改的 ,你看看你是不是所有的用到lpParamter 都该过来了
      

  5.   

    楼主如果是公司里面用的话,可以用商业的音视频开发包来搭建语音视频聊天室:http://www.anychat.cn,楼主可以看看,可以免费下载。
      

  6.   

    问题 :1 既然对话框的句柄已经知道了。。为什么不直接用hwnd->SetDlgItemText()来设置编辑框的内容 而是用postMessage传递消息给对话框,然后用对话框的消息响应函数来设置编辑框的内容?
    2 线程函数的标准形式 MSDN给出的如下
    DWORD WINAPI ThreadProc(
    LPVOID lpParameter // thread data
    );
    hwnd->SetDlgItemText...没这用法。 这是句柄,不是指针。lpParameter.  形参当然可以改动, 至于出错的原因,我想可能是你CPP文件中改了, 头文件中没改
      

  7.   

    因为他要传多个参数,所以用的是结构,但是类型是lprama的
      

  8.   

    HANDLE hThread = CreateThread(NULL,0,ThreadProc,(LPVOID)pRecvParam,0,NULL);
    这个函数是什么意思 没怎么弄懂 
      

  9.   

    楼主可依照书上说的再好好看看 因为此处是基于SDK编程 也不是基于MFC 所以要发送消息