gpt4 book ai didi

c++ - 当进程结束时,处于 Sleep() 中间的线程会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 21:00:34 30 4
gpt4 key购买 nike

我正在使用一个启动和结束线程的类。线程是在构造函数中创建的。只要标志为 TRUE,线程函数就会继续循环。该标志是该类的静态成员。解构器将标志设置为 FALSE。这样,该类的每个实例都有一个关联的线程,该线程在实例的生命周期内运行。

我正在努力思考解构函数运行时会发生什么,以及这是否是结束线程的好方法。我在多线程方面没有太多经验。

这是我认为会发生的事情。在解构函数内部,标志将被设置为 FALSE。让我们假设 Sleep() 正在无限运行。对象被销毁,但标志仍然存在于内存中,因为它是静态的。但是整个过程正在结束,比方说,所以在某个时候静态标志会消失。标志会在线程之前消失吗?如果线程被进程结束强制返回,线程是否还关心这个标志?我不知道此时发生了什么。

我在 Visual Studio 2010 中使用 Visual C++。

最佳答案

请注意,在其他线程仍在使用该对象(不是静态标志)时运行析构函数将产生未定义的结果。

想想当线程正在处理而不是检查事件标志时会发生什么,机会很小吧。

最好写一个 stop(bool wait) 函数,这样如果析构函数被调用并需要自动清理,你可以设置停止标志,并阻塞直到线程将另一个标志设置为“停止”,或者只需使用 pthread_join 加入该线程(不推荐,见下文)。

此外,当您为优雅终止而阻塞时,您还可以设置超时,并在出现问题时强制终止线程(并为调试生成警报)。

关于c++ - 当进程结束时,处于 Sleep() 中间的线程会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860771/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com