我的应用程序是多线程应用程序(使用wxThreads)。目前,主线程及其子工作线程正在将各种消息输出到Stdout(使用cout)。

我有一个带有wxTextCtrl的新框架/窗口,并希望将所有StdOut消息重定向到其中。

GuiLogFrame * logframe;

logframe =新的GuiLogFrame(NULL,wxID_ANY,wxEmptyString);
logframe-> Show();

logredirector =新的wxStreamToTextRedirector(logframe-> get_log_textctrl());


这行不通。但是如果我替换最后一行

wxStreamToTextRedirector redir(logframe-> get_log_textctrl());


只要redir在范围内,标准输出将被重定向到日志框wxTextCtrl ...即使它超出范围,我也希望它保持不变。

我想要的是wxStreamToTextRedirector在整个应用程序运行期间保持完好无损...因此,即使新线程的cout也将重定向到同一wxTextCtrl中。

有什么想法吗?

最佳答案

要知道的一件事很重要,那就是GUI操作应该只在主线程上完成。如果您不这样做,则当您同时进行多个GUI操作时,它将崩溃或锁定。在Windows下绝对是这样,但是我相信它适用于所有平台。您需要做的是使用GetEventHandler()-> AddPendingEvent将事件发布到控件。然后wx会将事件添加到对象的队列中,并且在主线程运行时,它可以执行GUI操作。

这可能不是您所提问题的确切答案,但它是相关信息。

10-07 18:53