wxwidgets和线程

时间:2011-07-31 14:58:29

标签: multithreading wxwidgets

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

如果您可以发布一些代码,显示您是如何从线程返回的,那么可能有助于识别问题。看起来你可能正在从线程中做UI的东西而只是没有意识到它。 (但是,如果没有看到任何代码,很难说。)