wxRichTextCtrl没有用方法Delete()释放内存

时间:2014-04-16 19:09:28

标签: c++ windows memory-management wxwidgets richtext

我正在编写一个日志应用程序,它接收数据并在带有彩色线条的wxRichTextCtrl框中打印日志。首先,我将日志行存储在包含文本和颜色信息的结构向量中,然后wxTimer()事件触发一个函数,该函数读取向量的内容并将其附加到富文本窗口。

当富文本缓冲区达到250行时,我删除最旧的行,以便始终在日志窗口中显示最多250行。显然,这并没有释放内存。看看我的可执行文件在任务管理器中的内存使用情况,我可以看到每个新行使用的内存增加,即使程序正在删除最旧的行。这是wxRichTextCtrl的已知错误吗?

这里摘录了我的代码:

声明:

wxRichTextCtrl *lstEventList;
// A vector of structures, a nice way to create a multi-dimensional vector
struct MidiLogStruct { wxString Text; wxColour Color; };
vector<MidiLogStruct> MidiLog;

在记录功能中:

// eventLog is a wxString object containing the text
// eventColor is a wxColour object defining the text color
const MidiLogStruct thisLog = {eventLog, eventColor};
MidiLog.push_back(thisLog);

在填充显示框的计时器功能中:

// Show all data stored in buffer
for (unsigned int i=0; i < MidiLog.size(); ++i)
{
    lstEventList->SetInsertionPointEnd();                           // Set cursor after the last character
    lstEventList->Newline();                                        // Add a new CRLF
    lstEventList->BeginTextColour(MidiLog[i].Color);                // Set text color
    lstEventList->WriteText(MidiLog[i].Text);                       // Write text
    lstEventList->ShowPosition(lstEventList->GetLastPosition());    // Make sure the last line is in view
}

// Clear buffer
MidiLog.clear();

// Delete all lines that exceed the max NUMOFMIDILOGLINES
if (lstEventList->GetNumberOfLines() > NUMOFMIDILOGLINES)
    lstEventList->Delete(wxRichTextRange(0, lstEventList->XYToPosition(0, lstEventList->GetNumberOfLines() - NUMOFMIDILOGLINES)));

0 个答案:

没有答案