簡體   English   中英

用C ++線程寫入文件

[英]Write to file in thread, C++

我編寫了一個程序,該程序應該在線程中寫入“ 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;
}

問題在於,您的主程序會在線程完成運行之前關閉文件並退出,這意味着線程可能會嘗試寫入已關閉的文件, 並且該文件將被進程殺死。

您必須等待線程完成才能退出進程。 例如,可以使用GetExitCodeThread輪詢線程退出的時間來執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM