OSDN Git Service

Fixed issue #209: High CPU usage in tortoiseproc.exe & Append text to edit ctrl
authorFrank Li <lznuaa@gmail.com>
Fri, 23 Oct 2009 06:42:45 +0000 (14:42 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 23 Oct 2009 06:42:45 +0000 (14:42 +0800)
Limit max ProgressDlg log is 500 lines

Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/ProgressDlg.cpp

index 248d9dd..9dfc576 100644 (file)
@@ -272,26 +272,27 @@ void CProgressDlg::ParserCmdOutput(TCHAR ch)
                TRACE(_T("End Char %s \r\n"),ch==_T('\r')?_T("lf"):_T(""));\r
                TRACE(_T("End Char %s \r\n"),ch==_T('\n')?_T("cr"):_T(""));\r
 \r
-               CString text;\r
-               m_Log.GetWindowTextW(text);\r
-               int count=0;\r
-               for( int i=0;i<text.GetLength();i++)\r
-               {\r
-                       if(text[i]==_T('\n'))\r
-                               count++;\r
-               }\r
-               if(count > 500)\r
-               {\r
-                       int start=text.Find(_T('\n'),0);\r
-                       text = text.Mid(start+1);\r
-               }\r
+               int lines=m_Log.GetLineCount();\r
+\r
                if(ch == _T('\r'))\r
+               {       \r
+                       int start=m_Log.LineIndex(lines-1);\r
+                       int length=m_Log.LineLength(lines-1);\r
+                       m_Log.SetSel( start,start+length);\r
+                       m_Log.ReplaceSel(m_LogText);\r
+\r
+               }else\r
                {\r
-                       RemoveLastLine(text);\r
+                       m_Log.SetSel(m_Log.GetWindowTextLength(),\r
+                                            m_Log.GetWindowTextLength());\r
+                       m_Log.ReplaceSel(CString(_T("\r\n"))+m_LogText);\r
                }\r
-               text+=_T("\r\n")+m_LogText;\r
-               m_Log.SetWindowTextW(text);\r
                \r
+               if( lines >500 ) //limited log length\r
+               {\r
+                       m_Log.SetSel(0,m_Log.LineLength(0));\r
+                       m_Log.ReplaceSel(_T(""));\r
+               }\r
                m_Log.LineScroll(m_Log.GetLineCount());\r
 \r
                int s1=m_LogText.Find(_T(':'));\r