Здравствуйте.
Есть программа, работающая круглосуточно, периодически производящая некоторые вычисления, пишущая о своих успехах в текстовый файл. Эта запись реализована примитивным логгером, представляющем собой класс, содержащий функцию записи очередного сообщения в текущий файл лога(который меняется по прошествии определённого времени). Наблюдается странный плохо воспроизводимый глюк: при длительной работе в файле лога отсутствуют некоторые строки. Причём одни и те же. Т.е. должно быть
aaa1
bbb1
ccc1
---
aaa2
bbb2
ccc2
...
а есть
aaa1
ccc1
---
aaa2
ccc2
...
Вот функция записи
void Logger::write( const char *format, ... )
{
static bool newFile = true;
static bool firstTime = true;
if( timer.timePassed( period ) || firstTime )
{
newFile = true;
if( !oldLogName.empty() )
remove( oldLogName.c_str() );
oldLogName = curLogName;
curLogName = timer.getTimeStr();
curLogName += ".txt";
timer.noteDownTime();
firstTime = false;
}
if( FILE *file = fopen( curLogName.c_str(), newFile ? "w" : "a" ) )
{
newFile = false;
va_list args;
va_start( args, format );
vfprintf( file, format, args );
va_end( args );
fclose( file );
}
}
Не подскажете, с чем может быть связано такой поведение?