代碼如下:
void CMyFristDlg::OnBnClickedButton13()
{
int argc=1;
char *argv[]={"OpenGL Thread "};
glutInit(&argc,argv);//初始化glut
UpdateData(TRUE);
CWinThread *Mythread=new CWinThread();
Mythread=AfxBeginThread((AFX_THREADPROC)OpenGLThread1,this);//創建opengl執行緒
UpdateData(FALSE);
}
int CMyFristDlg::OpenGLThread1(LPVOID lpv)
{
CMyFristDlg* pTaskMain = (CMyFristDlg *) lpv;
screenW = glutGet(GLUT_SCREEN_WIDTH);
screenH = glutGet(GLUT_SCREEN_HEIGHT);
int windowPosX = 0;
int windowPosY = 0;
glutInitWindowPosition(windowPosX, windowPosY);
glutInitWindowSize(WINDOW_SIZE_W, WINDOW_SIZE_H);
if (stereoMode == C_STEREO_ACTIVE)
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE | GLUT_STEREO);
else
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutCreateWindow("膽囊按壓");
#ifdef GLEW_VERSION
// initialize GLEW
glewInit();
#endif
glutMouseFunc(mouseClick);
glutMotionFunc(mouseMove);
glutDisplayFunc(updateGraphics);
glutKeyboardFunc(keySelect);
glutReshapeFunc(resizeWindow);
mydisplay();
// create a thread which starts the main haptics rendering loop
cThread* hapticsThread = new cThread();
hapticsThread->start(updateHaptics, CTHREAD_PRIORITY_HAPTICS);
//simulationRunning = false;
// setup callback when application exits
atexit(close);
// start the main graphics rendering loop
glutTimerFunc(50, graphicsTimer, 0);
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);
glutMainLoop();
return 0;
}
uj5u.com熱心網友回復:
《Windows核心編程》?uj5u.com熱心網友回復:
AfxBeginThread 是啟動執行緒的函式吧,要結束一個執行緒,要么是等執行緒的任務完成后,自己結束。
還有就是發Windows訊息,通知它結束。
還有就是暴力的AfxEndThread結束或者其他的強制終止API。
但是會帶來記憶體泄露的問題。
可以參考J.J.HOU的《深入淺出MFC》
uj5u.com熱心網友回復:
由執行緒自己釋放自己的資源uj5u.com熱心網友回復:
我是這樣:執行緒函式里:
while(flag)
{
.....
}
想結束就執行緒函式外,呼叫執行緒類的共有函式,把flag置為false
uj5u.com熱心網友回復:
你的這個執行緒,順其自然,執行緒體運行結束,資源自然就釋放了。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/134103.html
標籤:進程/線程/DLL
