如何正常的退出线程?

meistone 2003-12-05 02:20:12
我在一个应用程序中开了一个读取系统时间,然后在对话框中显示的线程,开了之后能正确的显示系统时间,但是我用CloseHandle()来关闭这个线程之后,对话框中的系统时间显示还在变化,我该怎么样来关闭这个线程,才能在现成关闭之后对话框中的显示不再变化,谢谢!盼答!
...全文
320 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohedou 2003-12-05
  • 打赏
  • 举报
回复
从《核心编程》里抄了几句,你还是自己再看看吧:
第6章 线程的基础知识
6.5 终止线程的运行 127
6.5.1 线程函数返回 127
6.5.2 ExitThread函数 127
6.5.3 TerminateThread函数 127
6.5.4 在进程终止运行时撤消线程 128
6.5.5 线程终止运行时发生的操作 128

与E x i t T h r e a d 不同,E x i t T h r e a d 总是撤消调用的线程,而Te r m i n a t e T h r e a d 能够撤消任何线程。
h T h r e a d 参数用于标识被终止运行的线程的句柄。当线程终止运行时,它的退出代码成为你作为d w E x i t C o d e 参数传递的值。同时,线程的内核对象的使用计数也被递减。
注意Te r m i n a t e T h r e a d 函数是异步运行的函数,也就是说,它告诉系统你想要线程终止运行,但是,当函数返回时,不能保证线程被撤消。如果需要确切地知道该线程已
经终止运行,必须调用Wa i t F o r S i n g l e O b j e c t (第9 章介绍)或者类似的函数,传递线程的句柄。 设计良好的应用程序从来不使用这个函数,因为被终止运行的线程收不到它被撤消的通知。线程不能正确地清除,并且不能防止自己被撤消。
topwork 2003-12-05
  • 打赏
  • 举报
回复
所谓线程退出,也就是你的线程函数正常退出了;
零壹智慧 2003-12-05
  • 打赏
  • 举报
回复
设置标记,通过线程while(flag)就可以,实现上就是让线程函数结束就可以了
POSONE 2003-12-05
  • 打赏
  • 举报
回复
设置一人变量就行
flyhigh 2003-12-05
  • 打赏
  • 举报
回复
1 set flag
2 modify flag and WaitForSingleObject etc.
seilfer2000 2003-12-05
  • 打赏
  • 举报
回复
你只要让那个线程有个可以退出的地方,然后需要的时候让他自己退出就行了
liutaoxwl 2003-12-05
  • 打赏
  • 举报
回复
如果调用TerminateThread,c++运行使得一些清理工作都没有进行,还是设置标志让线程函数正常退出吧
yifengling0 2003-12-05
  • 打赏
  • 举报
回复
正常退出就是线程函数退出了!~

lansefeng 2003-12-05
  • 打赏
  • 举报
回复
可以在线程里面设置一个bool变量,
想要退出线程时,把bool变量置未true,
在线程的循环里面判断这个变量,满足条件,退出循环
Semigod 2003-12-05
  • 打赏
  • 举报
回复
CloseHandle()不是用来关闭线程的,它只是释放了线程的句柄资源。
要关闭线程,最好的方法是,通过各种方式通知线程自己去结束。
实在不行才会使用TerminateThread()来结束线程。

15,471

社区成员

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

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