0

私は何かに行き詰まっています。OOPで複数のフォームを生成することについて。

ほとんどの場合、メッセージ ループは (wxWidget の場合) window->show(); です。

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

    return true;
}

他の人は oWindow->run() を持っていますが、とにかく私の質問は:

上記の関数とまったく同じ構造を持つ 2 つ目のスレッドを作成し、メッセージ ループ メソッドを呼び出しました。問題は、ウィンドウが突然現れたり消えたりすることです。これは私には意味がありません。ただし、私が電話した場合:

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 ウィンドウを実行することはできません。

「wxWindow や wxBitmap などの GUI 呼び出しは、セカンダリ スレッドでは明示的にまったく安全ではなく、アプリケーションを途中で終了させる可能性があります。これは、基礎となるネイティブ API や wxThread が GUI を実行しないという事実など、いくつかの理由によるものです。 MFC などの他の API に似たイベント ループ。」

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

ところで、あなたがやりたいことが良い考えである状況は想像できません。複数のスレッドでウィンドウを調整する必要はありません。

Windows プログラムはイベント駆動型です。トップ レベル ウィンドウはいくつでも持つことができますが、イベント キューは 1 つだけにする必要があります。これにより、2 つのウィンドウのイベントが同じリソースに対して競合することはありません。これが、wxWidgets が、両方ともウィンドウ イベントを処理する 2 つのスレッドを作成しようとするのを防ぐ理由です。

于 2013-01-23T00:00:24.743 に答える