vc创建一个线程的方法:
vc创建一个线程的方法:
创建线程使用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) 
waitforsingleobject函数
while(!m_end) 
AfxMessageBox("test;"); 
:
:Sleep(2000); 
return  0; 
终止线程代码 
m_end  =  true; 
WaitForSingleObject(pThread->m_hThread,INFINITE);      //等待线程结束 
delete  pThread;                //删除线程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。