wxwidgets and threads



在我的应用程序中,我从onThread函数运行wglGetCurrentDC()wglGetCurrentContext()(这个函数应该像这里声明的那样调用——EVT_THREAD(wxID_ANY,MyCanvas::onThread))两种情况下都得到NULL。当我从onThread不运行它是可以的…为了解决问题,什么是工作-(我必须在从线程获得事件时运行它们!)

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

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

无论如何,从wglGetCurrentDC文档中,如果当前窗口的DC不存在,该函数返回NULL。这表明上下文以某种方式被销毁,或者您没有从您认为正在调用它的窗口调用它(可能是因为您的线程?)。我想重申Alex说过的话;不要从主线程之外的任何线程调用UI代码。

如果你可以张贴一些代码显示如何从线程返回,它可能有助于确定问题。似乎你在线程中做UI的事情,只是没有意识到。(如果没有看到任何代码,很难判断。)

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

最新更新