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 回答