我有一个工作线程如下:
UINT WorkerThread( LPVOID pParam )
{
CWnd *pstaTimer=(CWnd*)pParam;
for(int i=0;i<1000;i++)
{
//TRACE("thread %d\n",i);
char szT[100];
sprintf(szT,"worker thread : %d",i);
pstaTimer->SetWindowText(szT);
Sleep(5);
}
return 0;
}调用方式:
void CSam_sp_43Dlg::OnWorkT() 
{
AfxBeginThread(WorkerThread,&m_staTimer);
}程序起来后,运行该线程,运行结束后关闭窗口,正常,但是我发现在线程运行中关闭窗口会有内存泄漏,请教各位如何正常地在线程运行中关闭程序?谢谢

解决方案 »

  1.   

    for循环的时候增加事件标识,在退出时候设置事件,先让线程退出,再退出主程序
      

  2.   

    声明一个全局变量
    HANDLE hExit;
    程序启动的时候初始化它:
    hExit = CreateEvent(NULL,FALSE,FALSE,NULL);
    关闭窗口的时候触发事件:
    SetEvent(hExit);
    WaitForSingleObject(hThread,INFINITE); //等待工作线程退出,hThread是工作线程的句柄
    CloseHandle(hExit);
    CloseHandle(hThread);工作线程中判断事件是否发生:
    UINT WorkerThread( LPVOID pParam )
    {
    CEvent event;
    CWnd *pstaTimer=(CWnd*)pParam;
    for(int i=0;WaitForSingleObject(hExit,0) == WAIT_TIMEOUT && i<1000;i++)
    {
    //TRACE("thread %d\n",i);
    char szT[100];
    sprintf(szT,"worker thread : %d",i);
    pstaTimer->SetWindowText(szT);
    Sleep(5);
    }
    return 0;
    }
      

  3.   

    或者窗口关闭前TerminateThread。
      

  4.   

    HANDLE handle = GetCurrentProcess();
    TerminateProcess(handle,0);试试