0

简而言之,我正在尝试为我的网络应用程序实现一个 GUI。他们都有 mainloop() 所以我试图将它们放入单独的线程中,并且我正在使用 boost::thread 。

    //standard initialization of boost::thread
    GuiThread.join();
    NetworkThread.join();

但是,由于某种未知原因,上述崩溃。我正在寻找任何方法来做同样的事情,所以任何建议都会受到赞赏。

在此先感谢,红。

编辑:

我正在创建 wxWidgets 主循环的 boost::thread GuiThread,如下所示:

    boost::thread GuiThread = boost::thread ( boost::bind( &myAppClass::MainLoop(), this));

和 Networkthread 一样。

然后我像这样重写 wxApp OnRun() 函数:

    int OnRun() {
            GuiThread.join();
            NetworkThread.join();
            return 0;
    }

当我运行它时(在 vs2010 中),它说:myApp.exe 触发了一个断点,如果我按 continue 它将停止显示窗口,如果我按 break 它会显示我的程序集。

4

1 回答 1

1

您必须从初始化库的同一线程运行 wxWidgets 主循环。如果您想在除main 之外的线程中运行它,这意味着您不能使用标准IMPLEMENT_APP()宏而必须自己进行初始化,例如通过wxEntry()手动调用。

于 2012-11-12T11:24:18.550 回答