创建一个线程后,怎样结束线程

golliver2002 2003-07-15 02:24:08
创建一个线程后,怎样结束线程
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
free_card 2003-07-15
  • 打赏
  • 举报
回复
终止线程有三种方法:
1.线程可以在自身内部调用AfxEndThread()来终止自身的运行

2.可以在线程的外部调用BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )来强行终止一个线程的运行,
然后调用CloseHandle()函数释放线程所占用的堆栈

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; //删除线程

kxcc_sx 2003-07-15
  • 打赏
  • 举报
回复
_endthread();
wlzqi 2003-07-15
  • 打赏
  • 举报
回复
在线程函数中返回0;return 0;
cnpeople 2003-07-15
  • 打赏
  • 举报
回复
让线程函数自动结束,或者调用ExitThread()函数

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧