请问如何结束CWinThread?

sigh02 2008-05-12 05:36:42
如下一个最简单的例子线程:
HANDLE hThreadEvent;
unsigned int testProc(void * pParam)
{

WaitForSingleObject(hThreadEvent,INFINITE);
return 1;
}

pThread->ExitInstance();
CloseHandle(pThread->m_hThread);
delete pThread;
三句话都不能使其结束
只能 SetEvent(hThreadEvent) ,可是我真正的程序里面有好几个event,这样很麻烦
请问有什么比较简单的方法结束一个CWinThread线程吗?
...全文
1262 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edward 2008-06-05
  • 打赏
  • 举报
回复
唉,建议楼主去读下有关线程的基础知识吧。像你这么像苍蝇一样乱撞看着难受。
DDGG 2008-06-05
  • 打赏
  • 举报
回复
想请教下线程中怎样收取PostThreadMessage发过来的WM_QUIT?
sigh02 2008-06-04
  • 打赏
  • 举报
回复
那么请问发送WM_QUIT以后,还需要delete pThread吗?
palmax 2008-05-22
  • 打赏
  • 举报
回复
不建议强制结束线程
最好在线程里设个标记位,要结束的时候,设置这个标记位,然后线程的执行体函数自然退出

给线程发消息可以用PostThreadMessage,然后发送WM_QUIT,就可以了
sigh02 2008-05-22
  • 打赏
  • 举报
回复
到底需不需要delete CWinThread啊?!!!!!
sigh02 2008-05-22
  • 打赏
  • 举报
回复
顶一下
看来这个问题很难
hityct1 2008-05-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 arong1234 的回复:]
不要以为很简单,灵活运用这两个是个很高深的学问。不要刚知道答案就开始浮起来了
引用 3 楼 sigh02 的回复:
就是while(flag)+ WaitForObject呗?
[/Quote]

道理简单,实现起来很麻烦。
sigh02 2008-05-13
  • 打赏
  • 举报
回复
现在我打算用TerminateThread了,不用事件了
如果用TerminateThread还需要closehandle和delete CWinThread么?
sigh02 2008-05-12
  • 打赏
  • 举报
回复
莫非只好用大家都不鼓励的TerminateThread了么?
用TerminateThread的话,线程函数里还需要调用ExitThread不?
arong1234 2008-05-12
  • 打赏
  • 举报
回复
这种情况没有需要释放的东西,直接terminate即可。不过你创建一个线程啥都不干退出干嘛?
sigh02 2008-05-12
  • 打赏
  • 举报
回复
我突然明白我的问题了:
我是要结束线程池中CREATE_SUSPEND的线程啊!
按说我上面的做法对跑起来的线程没问题
可是创建以后就挂起来还没有跑的线程,根本没机会去wait for signal然后退出啊.....
大哥们,请问如何释放挂起来没执行的线程啊????
sigh02 2008-05-12
  • 打赏
  • 举报
回复
请问一个event能不能触发多个WaitForSingleObject啊?
我的印象中是可以的,可是我现在这么写,却不好使,不知道为什么
定义一个全局的event:
HANDLE hExit = CreateEvent(0,true,false,0);
每个线程等两个event
thread_proc()
{
if (WaitForMultipleObject(2, hEvents, false, INFINITE)== WAIT_OBJECT_0 +1
//被通知退出了
}
其中
hEvents[0] = 各个不同的event
hEvents[1] = hExit
通过一个函数来通知所有的线程退出
void quit()
{
SetEvent(hExit);
}
可是现在不好使啊...............
古月无华 2008-05-12
  • 打赏
  • 举报
回复
线程函数返回,最直接,安全的方法!
arong1234 2008-05-12
  • 打赏
  • 举报
回复
不要以为很简单,灵活运用这两个是个很高深的学问。不要刚知道答案就开始浮起来了
[Quote=引用 3 楼 sigh02 的回复:]
就是while(flag)+ WaitForObject呗?
[/Quote]
sigh02 2008-05-12
  • 打赏
  • 举报
回复
就是while(flag)+ WaitForObject呗?
arong1234 2008-05-12
  • 打赏
  • 举报
回复
尽最大可能不要用TerminateThread
所有的线程的安全退出方法是从线程内部退出,i.e. 在线程内调用ExitThread
zgl7903 2008-05-12
  • 打赏
  • 举报
回复
1 在线程中加入标志量,退出前设置标志量等待,这是比较常规的做法
2 TerminateThread 在NT下需要THREAD_TERMINATE权限

15,466

社区成员

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

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