【问题标题】:wxwidgets and threadswxwidgets 和线程
【发布时间】:2011-07-31 14:58:29
【问题描述】:

在我的应用程序中,我从 onThread 函数运行 wglGetCurrentDC()wglGetCurrentContext() (此函数应按此处声明的方式调用 - EVT_THREAD(wxID_ANY,MyCanvas::onThread)) 在这两种情况下我都会得到NULL。当我不是从onThread 运行它时,没关系…… 解决问题的方法是什么——(从线程获取事件时我必须运行它们!)

正如 Alex 建议的那样,我更改为 wxPostEvent 以将事件重定向到主线程,该线程在其 onThread 函数中捕获事件。在此 onThread 函数中,我有 wglGetCurrentDC()wglGetCurrentContext() 调用...他们仍然返回null。请解释我做错了什么。以及如何解决他的问题。

【问题讨论】:

    标签: multithreading wxwidgets


    【解决方案1】:

    也许我理解错了,但您不应该使用 wxGLCanvas 和 wxGLContext 而不是特定于 Windows 的代码吗?至少它可能与其他 wxWidget 代码更兼容。

    无论如何,从wglGetCurrentDC documentation 开始,如果当前窗口的 DC 不存在,该函数将返回 NULL。这表明上下文要么以某种方式被破坏,要么你没有从你认为你正在调用它的窗口调用它(可能是因为你的线程?)。我会重申亚历克斯所说的话;不要从除主线程之外的任何线程调用 UI 代码。

    如果您可以发布一些代码来显示您是如何从线程返回的,这可能有助于识别问题。您似乎正在从线程中做 UI 的东西,只是没有意识到这一点。 (不过,如果没有看到任何代码就很难判断。)

    【讨论】:

      【解决方案2】:

      不要从工作线程中触摸任何与 UI 相关的东西。这是所有 UI 框架的一般要求。使用 wxPostEvent 将工作重定向到主应用程序线程。

      【讨论】:

      • 我按照你说的进行了更改,并使用 wxPostEvent 将事件重定向到主线程,主线程在其 onThread 函数中捕获事件。在这个 onThread 函数中,我有 wglGetCurrentDC() 和 wglGetCurrentContext() 调用...他们仍然返回null。请解释我做错了什么。以及如何解决他的问题
      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 2022-01-02
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多