vc创建一个线程和销毁的方法

来源:互联网 发布:优化目标函数 编辑:程序博客网 时间:2024/05/21 17:42
创建线程使用CreateThread
The CreateThread function creates a thread to execute within the address space of the calling process. 

 

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,  
 
DWORD dwStackSize,  指定初始提交栈的大小
 
LPTHREAD_START_ROUTINE lpStartAddress,
            //由线程执行,表示线程的起始地址,指定线程入口函数,
         //该入口函数的参数类型以及返回类型要与ThreadProc()函数声明的类型要保持一致
LPVOID lpParameter,  //指定一个单独的值传递给线程
DWORD dwCreationFlags, //指定控件线程创建的附加标记
LPDWORD lpThreadId );   //指向一个用来接收线程的标识符变量

参数1:指向SECURITY_ATTRIBUTES结构体的指针。

vc终止线程有三种方法:   
  1.线程可以在自身内部调用AfxEndThread()来终止自身的运行   
    
  2.可以在线程的外部调用BOOL   TerminateThread(   HANDLE   hThread,   DWORD   dwExitCode   )来强行终止一个线程的运行,   
  然后调用CloseHandle()函数释放线程所占用的堆栈   

  TerminateThread会有资源泄漏,不要万不得已,不要用这个函数
    DWORD code;
  if(GetExitCodeThread(MonitorComm,&code))  //MonitorComm 你创建的线程句柄
   if(code==STILL_ACTIVE)
   {
     TerminateThread(MonitorComm,0);
     CloseHandle(MonitorComm);
   }

   这样就安全了
  3.第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止。   
    
  下面的例子来演示第三种方法   
  全局变量m_end来表示是否要结束线程   
    
  bool   m_end   =   false;   
  HWND   hWnd;   
    
  启动线程:   
  CWinThread*   pThread;   
    
  hWnd   =   GetSafeHwnd();   
  pThread   =   AfxBeginThread(ThreadProc,hWnd);   
  pThread->m_bAutoDelete   =   false;   
    
  线程的函数   
  UINT   ThreadProc(LPVOID   pParam);   
  UINT   ThreadProc(LPVOID   pParam)   
  {   
  while(!m_end)   
  {   
  AfxMessageBox("test;");   
  ::Sleep(2000);   
  }   
  return   0;   
  }   
    
  终止线程代码   
  m_end   =   true;   
  WaitForSingleObject(pThread->m_hThread,INFINITE);       //等待线程结束   
  delete   pThread;                 //删除线程 

原创粉丝点击