Multithreading wxwidgets和线程
在我的应用程序中,我运行Multithreading wxwidgets和线程,multithreading,wxwidgets,Multithreading,Wxwidgets,在我的应用程序中,我运行wglGetCurrentDC()和wglGetCurrentContext()fromonThread函数 (此函数应按此处声明的方式调用-EVT\u线程(wxID\u ANY,MyCanvas::onThread)) 在这两种情况下,我都得到NULL。当我不是在阅读时运行它时,… 解决这个问题的方法是什么?(从线程获取事件时,我必须运行它们!) 正如Alex所建议的,我改为wxPostEvent将事件重定向到主线程,主线程在其onThread函数中捕获事件。在这个on
wglGetCurrentDC()
和wglGetCurrentContext()
fromonThread
函数
(此函数应按此处声明的方式调用-EVT\u线程(wxID\u ANY,MyCanvas::onThread)
)
在这两种情况下,我都得到NULL
。当我不是在阅读时运行它时,…
解决这个问题的方法是什么?(从线程获取事件时,我必须运行它们!)
正如Alex所建议的,我改为wxPostEvent
将事件重定向到主线程,主线程在其onThread
函数中捕获事件。在这个onThread
函数中,我有wglGetCurrentDC()
和wglGetCurrentContext()
调用……它们仍然返回null。请解释我做错了什么。以及如何解决问题。不要从工作线程中接触任何与UI相关的内容。这是所有UI框架的一般要求。使用wxPostEvent将工作重定向到主应用程序线程。也许我有误解,但您是否应该使用wxGLCanvas和wxGLContext,而不是windows特定的代码?至少它可能与其他wxWidget代码更兼容
无论如何,如果当前窗口的DC不存在,则从返回NULL。这意味着要么上下文被破坏了,要么你没有从你认为是从窗口调用它(可能是因为你的线程?)。我要重申亚历克斯所说的话;不要从主线程以外的任何线程调用UI代码
如果您可以发布一些代码来显示您是如何从线程返回的,那么它可能有助于识别问题。看起来你可能是从线程开始做UI的事情,只是没有意识到而已。(虽然看不到任何代码,但很难说。)我按照您所说的进行了更改,并使用wxPostEvent将事件重定向到主线程,主线程在其onThread函数中捕获事件。在这个onThread函数中,我有wglGetCurrentDC()和wglGetCurrentContext()呼叫…仍然返回空。请解释我做错了什么。以及如何解决问题