DWORD WINAPI CalcProc(LPVOID l)
{
    ((MyDlg*)l)->Calc();
    return 0;
}
void MyDlg::Calc()
{
    while(1)
   {
      //My Calc code...
      //.............
      //Check abort flag
      if(bAbort)
     {
         return;
      }
    }
}
void MyDlg::OnBtnClick()
{
    CreateThread(0,0,CalcProc,this,0,0);
}
CreateThread创建线程,那么如何关闭这个线程?谢谢!

解决方案 »

  1.   

    void ExitThread(
      DWORD dwExitCode
    );
      

  2.   

    http://www2.ccw.com.cn/02/0244/d/0244d04_1.asp
      

  3.   

    windows核心编程这部分上写的很详悉
      

  4.   

    线程函数通常在循环中检测一个原子量或内核变量来决定退出,象下面这样子:
    HANDLE g_hExit=CreateEvent(NULL,TRUE,FALSE,NULL);
    HANDLE g_hThread=NULL;
    DWORD CTestDlg::ThreadWork(LPVOID lp)
    {
      while(WaitforSingleObject(g_hExit,0)!=WAIT_OBJECT_0)
      {
       //Do you process
      }
      return EXIT_SUCCESS;
    }创建:
    void CTestDlg::OnBtnClick()
    {
      g_hThread=CreateThread(NULL,0,.........);
    }结束:
    void CDlgTest::OnBtnExitClick()
    {
      SetEvent(g_hExit);
      if (WaitforSingleObject(g_hThread,3000)==WAIT_TIMEOUT)
        TerminateThread(g_hThread,0);
      CloseHandle(g_hThread);
    }最后不要忘了关闭事件句柄
    CloseHandle(g_hExit);
      

  5.   

    一般是在线程体中自己退出
    比如渲染线程while(1)
    {
    if(user_command=exit)
    {
    quit();
    }
    if(!render())
    {
    quit();
    }
    }
      

  6.   

    方法有三种
    在windows核心编程上面有描述,上面的兄弟们也都说了最安全的办法是让线程函数自己返回,这是最安全的
      

  7.   

    让线程函数自己返回,一般资源都回释放,
    直接TerminateThread 可能导致资源,内存泄漏。
    WaitforSingleObject 来座吧,
    如果不清楚,可以看看 windows核心编程 电子书下载很容易!