当前位置: 首页 > 知识库问答 >
问题:

std::当主线程退出时,作为分离线程创建的线程终止[重复]

闾丘霖
2023-03-14
void threadF() {
    ofstream        f("data") ;
    for(int i=1; i<=5; i++) {
            f<<"t1:::"<<i<<"\n" ;
            f.flush() ;
            sleep(1) ;
    }
    f.close() ;
}

int main() {

    thread t1(threadF) ;

    cout<<"main #1\n" ;
    sleep(2) ;
    t1.detach() ;
    cout<<"main #2\n" ;
}
    null

共有1个答案

赫连永怡
2023-03-14

我需要对这种行为有个解释。

main返回时,进程终止。如果有一个线程在运行,不能保证它有机会完成。

此外,从技术上讲,在main之后触及任何全局状态都将返回未定义行为的结果,因为主线程将销毁所有静态存储对象。

 类似资料:
  • 问题内容: 我有两个线程:主线程和从主线程生成的线程。 当主线程退出时,整个程序会终止吗? 问题答案: 没有。 当所有非守护程序线程完成时,Java程序终止。 该文档指出: Java虚拟机启动时,通常只有一个非守护程序线程(通常调用某些指定类的名为main的方法)。Java虚拟机将继续执行线程,直到发生以下任何一种情况: 类的方法已被调用,安全管理器已允许进行退出操作。 不是守护程序线程的所有线程

  • 根据文件:https://docs.python.org/3/library/threading.html 线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出。初始值从创建线程继承。可以通过daemon属性或daemon构造函数参数设置该标志。 示例代码: 参考许多其他StackOverflow答案,我不清楚当主线程调用时,守护线程是否被迫关闭

  • 我正在考虑从主线程创建、的可能性,而分离的线程创建线程并等待之后再运行下一个线程。 但我不认为这是可能的,因为我总是在第一个线程之后而在下一个线程之前崩溃。 : : 因此,以下是我希望发生的事情: 更新:如何接受这个并将其分解,以便在标头中声明,但在需要的地方执行,然后执行

  • 我正在尝试终止子线程,它正在等待来自服务器的输入。我尝试使用该标志进行操作,但它在上停止,因为它等待来自服务器的输入,并且只有在此输入之后才检查该标志并中断。但这不是一个好的解决方案,因为我无法阻止它没有服务器消息。我还尝试先检查标志,然后再检查readline(),但它也不起作用。有什么好的解决办法吗?

  • 我正在研究这个问题的类似例子。我们有一个JavaFX应用程序,它通过以下线程运行一些GUI更新:ScheduledExecutorService::scheduleAtFixedRate。 这类似于其他几个问题。我认为最像我情况的两个是: JavaFX任务线程未终止 然而,我需要解决的问题是下一步。我的目标是一个嵌入式应用程序,没有机会手动终止JVM任务或其他简单的答案,等等。我担心重启是为了一些

  • 在linux中,当主线程终止时,整个过程都会退出,不管它是以何种方式终止的,都是通过函数out()或从main返回。如果主线程从main()返回,它将返回到称为crt. o或类似的“C运行时”。在crt. o中,它的c代码是这样的:退出(main(argc, argv));退出()将由主线程 最终调用,结果,所有线程都终止。 我的想法正确吗? 如果在crt中。o exit()被诸如void thr