C ++ Как эффективно обновлять содержимое файла - PullRequest
0 голосов
/ 20 мая 2019

Мне было интересно, как я могу обновить значения в файле?Предположим, у меня есть что-то вроде этого:

 //thread 1:    
       std::vector<int> v(10);

 //v is changed i.e. to {0,0,0,0,0,2,0,0,0,0}
       ...

 //after some time v is changed agian to: i.e. {0,0,3,0,0,2,0,0,0,0}

 //etc

 //thread 2: (is a react thread)   
 //apart from synchronization

       std::fstream file;
       file.open("test.txt", std::ios_base::out);
       while(true)
       {
           //file.seekp(0, std::ios_base::beg); -> with this almost works, but update takes too long
           for (auto const& e : v)
               file << e << ',';
           file.flush();
       }

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

1 Ответ

0 голосов
/ 20 мая 2019

Это возможно при использовании std :: call_once и std :: Once_flag

#include <mutex>
std::once_flag flag;

//in thread 2
std::call_once(flag, file.open("test.txt", std::ios_base::out));

file.open() будет вызываться только один раз.

...