0

我有点卡住了;关于在 OOP 中生成多个表单。

消息循环大部分时间是(wxWidget的情况)window->show();

bool MyApp::OnInit()
{
    MainWindow *oWindow = new MainWindow(wxT("My Window"));
    oWindow->Show(true);

    return true;
}

其他人有 oWindow->run(),但无论如何我的问题是:

我创建了第二个线程,其结构与上述函数完全相同,并调用了消息循环方法。问题是窗口突然出现然后消失,这对我来说没有意义。但是,如果我打电话:

MainWindow *oWindow = new MainWindow(wxT("My Window"));
        oWindow->Show(true);
MainWindow *oWindow2 = new MainWindow(wxT("My Window"));
        oWindow2->Show(true);

它会起作用,但我不希望这样,因为我需要跟踪我创建的窗口并将它们放在单独的线程上。我能做些什么?

4

1 回答 1

0

你不能在主线程以外的任何地方运行 wxWidgets 窗口。

“GUI 调用,例如对 wxWindow 或 wxBitmap 的调用在辅助线程中根本不安全,并且可能会过早结束您的应用程序。这是由于几个原因,包括底层原生 API 和 wxThread 不运行 GUI 的事实事件循环类似于 MFC 等其他 API。”

http://docs.wxwidgets.org/2.8/wx_wxthread.html

顺便说一句,我无法想象在任何情况下你想做的都是一个好主意。永远不需要在多个线程中调整窗口。

Windows 程序是事件驱动的。您可以拥有任意数量的顶级窗口,但应该只有一个事件队列,以便两个窗口上的事件不会最终争用相同的资源。这就是为什么 wxWidgets 会阻止您尝试创建两个都处理 Windows 事件的线程。

于 2013-01-23T00:00:24.743 回答