【发布时间】:2009-06-13 01:25:13
【问题描述】:
我基本上希望在我的 OpenGL/游戏中加入一个类似于本机的窗口 GUI 系统。我需要向用户显示一个窗口。
我正在研究 wxWidgets。
因为它通过“窃取” WinMain/MainLoop 来工作,所以我试图破解它,以便可以在单独的线程上运行它的主循环。
因为我无法让它的 wxThread 正常工作,所以我用 Windows 线程做了一个“示例”...但是初始化仍然在 wxWidgets 内部中断...
对此有何反馈?
我的代码是这样的:
class MyApp: public wxApp
{
virtual bool OnInit();
};
DECLARE_APP(MyApp)
IMPLEMENT_APP_NO_MAIN(MyApp)
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
wxApp* pApp = new MyApp();
wxApp::SetInstance(pApp);
int argc = 0; wxChar ** argv = NULL;
wxEntryStart(argc, argv);
pApp->CallOnInit();
pApp->OnRun();
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, wxCmdLineArgType lpCmdLine, int nCmdShow) {
DWORD id = 0;
CreateThread(NULL,0, MyThreadFunction,NULL, 0,&id);
assert(id != NULL);
return 0;
}
我尝试在主线程中编写 wxWidgets 初始化代码,并且只在单独的线程中调用 CallOnInit(),但结果相同。
【问题讨论】:
-
为什么主线程需要在wxWidgets框架之外工作?只是好奇,因为我也在使用 wxWidgets/OpenGL 进行游戏,并且只是将空闲功能用于我的“主要”。
-
我只是不希望我的游戏依赖 wxWidgets... 只依赖于 glut。如果 wxWidgets 可用,很好,我可以显示 GUI。
-
什么意思? wxWidgets 将在您发布游戏时可用,或者使用静态库版本。
标签: multithreading opengl wxwidgets glut