1

システム時刻をファイルに書き込むコードがあります。

std::ofstream file("time.txt");

    char *date;
    time_t timer;
    timer=time(NULL);
    date = asctime(localtime(&timer));

while ( true ) {
      std::cout << date << ", " << randomNumber  << std::endl;

      if (file.is_open())
      {
        file << date;
        file << ", ";
        file << randomNumber;
        file << "\n";
      }
}

file.close()

プログラムを実行して途中で停止すると(無限のwhileループ)、ファイルにデータを書き込むことができます。

ただし、コードを変更してSleep()タイマーを追加するだけの場合。ファイルにデータが書き込まれません。しかし、画面に出力が表示されます。これは予想される動作ですか?プログラムの実行を途中で終了しても、値がファイルに書き込まれるようにするにはどうすればよいですか?

    std::ofstream file("time.txt");

        char *date;
        time_t timer;
        timer=time(NULL);
        date = asctime(localtime(&timer));

    while ( true ) {

        **Sleep(100); // wait for 100 milli-seconds**
          std::cout << date << ", " << randomNumber  << std::endl;

          if (file.is_open())
          {
            file << date;
            file << ", ";
            file << randomNumber;
            file << "\n";
          }
    }

    file.close()

スリープタイマーの直後にファイルを閉じると、データが書き出されます。しかし、タイマーを追加する主な理由は、ファイルが書き込まれる頻度を遅くしたいということです...

4

1 に答える 1

3

内容がファイルに書き込まれるように、バッファをフラッシュする必要があります。に呼び出すstd::flushか変更file << "\n";file << std::endl;て、ストリームをフラッシュします。プログラムを呼び出さない場合Sleep、バッファがいっぱいになるとすぐにバッファの内容が書き込まれSleepますが、遅延があるためバッファがすぐにいっぱいにならないため、ファイルに書き込まれる内容。

于 2013-01-17T03:13:00.260 に答える