while(1)
   {
    m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
   }
这个函数没有出口啊,当然会占用CPU资源了,这不是个死循环嘛

解决方案 »

  1.   

    程序为了实现消息时时更新
    UINT ReceiveMsg(LPVOID pParam)
    {
        while(1)
       {
        m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
       }
    return 0;
    }
    才占50%呀,你RP不错呀,一般会接近100%哟
    加个Sleep()吧;UINT ReceiveMsg(LPVOID pParam)
    {
        while(1)
       {
        m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
        Sleep(100);//0.1秒
       }
    return 0;
    }
      

  2.   

    程序为了实现消息时时更新
    UINT ReceiveMsg(LPVOID pParam)
    {
        while(1)
       {
        m.list->AddString(str);//m_list 是ListBox控件变量 str为字符变量
       }
    return 0;
    }
    才占50%呀,你RP不错呀,一般会接近100%哟
    ===========================================
    估计楼主的是双核,所以只占50%
      

  3.   

    用Sleep函数会不会丢失数据?
      

  4.   

    不加的话线程不是要终止了吗?在SOCKET编程中加就没事啊。
    例如
    /////UDP接受信息线程开始
    UINT _UDPThread(LPVOID lparam)
    {

    CAaaDlg *pDlg=(CAaaDlg *)lparam;
    if(pDlg->StopServer==true) return -1;

    CSocket sockSrvrUdp;
    sockSrvrUdp.Create(PORT+pDlg->m_client,SOCK_DGRAM);
    char buff[100]={0};
    int ret=0;
    CString ipStr;
    CString msg;
    UINT port;
    for(;;)
    {

    ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值

    if(buff[0]=='D') return 0;
    if(ret==SOCKET_ERROR) 
    {
    break;
    }
    msg.Format(buff);
    pDlg->AddMsgList(ipStr,msg);
    }
    sockSrvrUdp.Close();
    return 0;
    }
      

  5.   

    Socket分成阻塞式和非阻塞式,只有非阻塞式的Socket用死循环才会出现CPU占用率高的情况。
    可以用别的方式如Select,异步IO或者完成端口等
      

  6.   

    我是说SOCKET中这种死循环没有出现占用率高的问题.
      

  7.   

    看来cpu是双核的.因为socket的有些函数是阻塞式的.
      

  8.   

    你原来的这样哪里不好
    for(;;)
    {ret=sockSrvrUdp.ReceiveFrom(buff,100,ipStr,port);//IP和port均为返回值if(buff[0]=='D') return 0;
    if(ret==SOCKET_ERROR) 
    {
    break;
    }
    msg.Format(buff);
    pDlg->AddMsgList(ipStr,msg);
    }
    sockSrvrUdp.Close();
    return 0;
    }