1

我写了一个程序,它应该在线程中写“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;
}
4

1 回答 1

5

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

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

于 2014-04-15T08:07:25.470 回答