对话框中有一CEdit控件,其绑定到m_strLog。并有一定时器,定时时间(如1s)到时,this->UpdateData(FALSE),CEdit中显示相应m_strLog(其内容是慢慢增加的),问题出现了:CPU使用率在增加了,如何解决?
OnTimer函数内:
case TIMER0: // Êý¾Ý½ÓÊÕ¶¨Ê±Æ÷
this->UpdateData(FALSE);  // 更新对话框中CEdit内容
其他处:
strLog += str;

解决方案 »

  1.   

    对话框中有一CEdit控件,其绑定到m_strLog。并有一定时器,定时时间(如1s)到时,this->UpdateData(FALSE),CEdit中显示相应m_strLog(其内容是慢慢增加的),问题出现了:CPU使用率在增加了,如何解决?
    OnTimer函数内:
    case TIMER0:
    this->UpdateData(FALSE);  // 更新对话框中CEdit内容
    其他处:
    strLog += str;
      

  2.   

    显示数据,本来就应该会占用cpu
      

  3.   

    但随着时间的推移,CPU会增加很多,并不是一个常量。我用CListBox可以解决,因为它每次只更新新添加的字符串,只是不知怎么让一行显示不下的折行显示。CEdit中每次更新的时候,都是用m_strLog(但它是慢慢长大的),不知能否实现每次只更新最新的数据?象Delphi中有,Memo.Lines.Append之类的函数,VC中的CListBox中也有AddString之类的函数,不知CEdit中能否实现一行一行的添加字符串
      

  4.   

    如果要在CEdit中换行不能用"\n",而要用"\r\n"实现自动换行
    在Proprites中把Mulitiline选上.我觉得你这样做效率不好
    可以这样试试int nLen = m_strLog.GetWindowTextLength(); //得到CEdit文本的长度
    m_strLog.SetSel(nLen,nLen);
    m_strLog.ReplaceSel(pszText);//pszText是你要加的文本.
      

  5.   

    juststone(灰虫轨迹),对,要的就是这种后半部的解决办法(前半部已知)。开始考虑的就是效率不好,导致CPU的资源耗尽。所以一直在找类似CList中的AddString的实现方法,但还未发现。你这种方法很巧妙,实现的应该是类似AddString的方法,只更新最新的,而不要更新所有的内容,提高了效率。