我在一个应用程序中开了一个读取系统时间,然后在对话框中显示的线程,开了之后能正确的显示系统时间,但是我用CloseHandle()来关闭这个线程之后,对话框中的系统时间显示还在变化,我该怎么样来关闭这个线程,才能在现成关闭之后对话框中的显示不再变化,谢谢!盼答!

解决方案 »

  1.   

    CloseHandle()不是用来关闭线程的,它只是释放了线程的句柄资源。
    要关闭线程,最好的方法是,通过各种方式通知线程自己去结束。
    实在不行才会使用TerminateThread()来结束线程。
      

  2.   

    可以在线程里面设置一个bool变量,
    想要退出线程时,把bool变量置未true,
    在线程的循环里面判断这个变量,满足条件,退出循环
      

  3.   

    如果调用TerminateThread,c++运行使得一些清理工作都没有进行,还是设置标志让线程函数正常退出吧
      

  4.   

    1 set flag
    2 modify flag and WaitForSingleObject etc.
      

  5.   

    设置标记,通过线程while(flag)就可以,实现上就是让线程函数结束就可以了
      

  6.   

    从《核心编程》里抄了几句,你还是自己再看看吧:
    第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 章介绍)或者类似的函数,传递线程的句柄。 设计良好的应用程序从来不使用这个函数,因为被终止运行的线程收不到它被撤消的通知。线程不能正确地清除,并且不能防止自己被撤消。