今天在调试一个多线程的程序时一直出问题,具体情况是这样的 我在程序的开始执行一个线程,线程一直执行,知道程序结束时才结束,所以我的程序在结束时要等待线程结束再结束自己。我后来发现了问题,修改后就ok了,我把修改后的大致代码帖出: UINT IsPress(LPVOID lpParam) { CCapAndRecordDlg * pDlg = NULL; pDlg = (CCapAndRecordDlg *)lpParam; if (pDlg==NULL) { return 1; } g_bQuit = false; UINT nBt[6] = {IDC_LEFT,IDC_RIGHT,IDC_UP,IDC_DOWN,IDC_FAR,IDC_NEAR}; //几个按纽id int nRun[6] = {0}; //该动作是否在做 int nPressCount[6] = {0}; //按纽检测到按的次数 CSingleLock lock(&g_quitEvent); while (1) { if (lock.Lock(20)) //是否退出, { g_bQuit = true; lock.Unlock(); return 1; } lock.Unlock(); //do what you do } return 0; } //==== //主程序 OnClose() { //do what U want g_quitEvent.SetEvent(); Sleep(200); while (!g_bQuit) //等待线程,这是在线程退出是置true的 { g_quitEvent.SetEvent(); //以下的作用是可能结束程序时,可能还要做别的操作,而它又未结束, MSG msg; while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } TRACE("\n----out exe-----\n"); CDialog::OnClose(); } 我一直出问题的地方就是没加 MSG msg; while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } 因为我在结束程序前有一个OnExit里面是对退出时的用户进行身份验证,用到了数据库操作,

评论