您的位置:首页 > 其它

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

2013-01-18 13:45 645 查看
创建线程使用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;                 //删除线程 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: