在线程,C ++中写入文件

时间:2014-04-15 08:03:13

标签: c++ multithreading ofstream createthread

我写了一个程序,应该写" 1"在线程中三秒钟。但是当我尝试调试或添加控件输出时,我意识到通常没有创建线程(控制台中没有输出或调试点的成就)。当我检查CreateThread()的返回值时,它没问题。我读到了I / O的登录文件,但我认为我不需要它。我想要一个有两个线程的程序;一个写作" 1"三秒钟,第二次写作" 2"三秒钟然后,比较结果。如果" 1"并不重要。和" 2"在输入文件中混合。

#include <iostream>
#include <fstream>
#include <windows.h>
#include <stdio.h>
#include <WinBase.h>
#include <ctime>

#define NTHREAD 2

std::ofstream myfile;

DWORD WINAPI fce1 (LPVOID a){
    time_t timerStart, timerNow;
    time(&timerStart);
    timerNow = timerStart;
    while((timerNow - timerStart) < 3)
    {
        myfile << "1";
        myfile.flush();
        time(&timerNow);
    }
    return 0;
}


int main()
{
    HANDLE threads[NTHREAD];
    DWORD dwThreads[NTHREAD];

    myfile.open("file.txt");
    threads[0] = CreateThread(NULL, 0, fce1, NULL, 0, &dwThreads[0]);
    if (threads[0] == NULL){
        printf("Error\n");
    }

    myfile.close();
    return 0;
}

1 个答案:

答案 0 :(得分:5)

问题是你的主程序关闭文件并在线程运行完毕之前退出,这意味着线程可能会尝试写入已关闭的文件它将被杀死过程

您必须等待线程完成才能退出进程。例如,您可以通过使用GetExitCodeThread轮询线程何时退出来执行此操作。