无法永远分离线程c ++

Posted

技术标签:

【中文标题】无法永远分离线程c ++【英文标题】:Can't detach thread forever c++ 【发布时间】:2017-03-18 20:56:23 【问题描述】:

我试图在下面的 c++ 程序中分离线程,这样即使在进程终止后,线程也会继续将一些字符写入文本文件。 问题是我无法完成它: 当程序终止时,线程停止写入“file.txt”文件。你能帮我解决这个问题吗?或者这根本不可能?

#include<thread>
#include<stdio.h>
using namespace std;

void printToFile()

    FILE *file;

    for (int i = 0; true; i++)
    
        fopen_s(&file, "file.txt", "w");
        fprintf(file, "%s%d", "n: ",i);
        fclose(file);
    
    return;


int main()

    thread t(printToFile);
    t.detach();

    return 0;

【问题讨论】:

【参考方案1】:

这是不可能的。当您的“主”线程终止时,它的所有“子线程”也会被杀死。您想要的是 fork() 一个单独的进程来执行此写入文件。

【讨论】:

由于 fopen_s 表明他正在使用 VS,他可能想要 CreateProcess(),因为 Windows 没有 fork() 调用。【参考方案2】:

不可能。 detach 只是将线程与其父线程分开,因此父线程无需担心清理它。一旦一个进程死亡,它的所有线程也会死亡。

【讨论】:

以上是关于无法永远分离线程c ++的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++11 中检查分离线程的状态?

由于虚拟内存不足,线程无法启动C#

单例,多线程,同时保证线程安全,是不是就意味着在执行单例方法时,无法并发?

smartirc4net 永远监听,无法退出线程

C ++多线程套接字无法接收客户端数据

在 C 中使用多线程服务器时无法完成文件传输