我有点卡在某件事上;关于在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);
它会起作用,但我不希望这样,因为我需要跟踪我创建的窗口并将它们放在单独的线程上。我能做什么?
您不能在主线程以外的任何位置运行 wxWidgets 窗口。
"GUI 调用,例如对 wxWindow 或 wxBitmap 的调用,在辅助线程中显然根本不安全,并且可能会过早结束您的应用程序。这是由于几个原因,包括底层原生 API 以及 wxThread 不会运行类似于 MFC 等其他 API 的 GUI 事件循环。
http://docs.wxwidgets.org/2.8/wx_wxthread.html
顺便说一句,我无法想象你想做的事情是一个好主意的任何情况。 永远不需要在多个线程中调整窗口。
Windows程序是事件驱动的。 您可以根据需要拥有任意数量的顶级窗口,但应该只有一个事件队列,以便两个窗口上的事件不会最终争用同一资源。 这就是为什么 wxWidgets 阻止您尝试创建两个同时处理窗口事件的线程。