代码如下:
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;
}

解决方案 »

  1.   

    《Windows核心编程》?
      

  2.   

    AfxBeginThread 是启动线程的函数吧,要结束一个线程,要么是等线程的任务完成后,自己结束。
    还有就是发Windows消息,通知它结束。
    还有就是暴力的AfxEndThread结束或者其他的强制终止API。
    但是会带来内存泄露的问题。可以参考J.J.HOU的《深入浅出MFC》
      

  3.   

    我是这样:线程函数里:
    while(flag)
    {
    .....
    }想结束就线程函数外,调用线程类的共有函数,把flag置为false