Невозможно записать в файл в цикле, содержащем sleep () - PullRequest
0 голосов
/ 12 июля 2011

Суть моей проблемы в том, что я не могу записать файл в цикле с помощью sleep (). Если у меня есть следующий код:

ofstream file
file.open("file.name");

for(;;) {
    file << "HELLO\n";
}

Этот код отлично работает и многократно печатает привет в "file.name". Тем не менее, я хочу сделать что-то вроде этого (я записываю данные из приложения в реальном времени):

for(;;) {
    file << "HELLO\n";
    sleep(1);
}

Кажется, это ничего не печатает в моем файле. Есть идеи?

Ответы [ 3 ]

6 голосов
/ 12 июля 2011

Вам необходимо очистить вывод. Выходной поток буферизует ваши данные в память, но не записывает их на диск. Вы должны либо использовать std::endl (который печатает новую строку и сбрасывает) вместо строкового литерала '\n', либо явно очищать поток с помощью std::flush:

for(;;) {
    file << "HELLO" << endl;
}
// or
for(;;) {
    file << "HELLO\n" << flush;
}
3 голосов
/ 12 июля 2011

Волшебное слово, которое вы ищете, это "флеш".

c ++ std :: ofstream flush (), но не close ()

перед сном очистите файл, чтобы он не находился в буфере, ожидая, пока не произойдет достаточное изменение для записи.

2 голосов
/ 12 июля 2011

Вероятно, это просто проблема с буферизацией.Поскольку теперь вы пишете намного медленнее, выходной буфер не будет заполняться так быстро, что вы не сможете «увидеть» записанные данные.Попробуйте добавить flush () перед сном.

file.flush()
...