1

スレッドに「1」を 3 秒間書き込むプログラムを作成しました。しかし、コントロールの出力をデバッグまたは追加しようとすると、スレッドが作成されないことが多いことに気付きます (コンソールに出力がなく、デバッグ ポイントの成果もありません)。の戻り値を確認するとCreateThread()OKです。I/O用のログインファイルについて読みましたが、必要ないと思います。2 つのスレッドを持つプログラムが必要です。1 つは「1」を 3 秒間書き込み、2 番目は「2」を 3 秒間書き込みます。次に、結果を比較します。入力ファイルに「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 に答える