Я перенаправляю stderr
в файл журнала в Windows Phone Runtime:
int stdError = 0;
FILE* pLogFile = NULL;
// Redirect stderror to a logfile
if ( ! m_logFilePath.empty( ) )
{
// Get a duplicate file descriptor for stderror
// This returns -1 on failure
stdError = ::_dup( ::_fileno( stderr ) );
if ( stdError != -1 )
{
// Redirect stderror to a log file so we can capture
// ffmpeg error information
// Ignore the return value (nothing we can do if this fails)
::freopen_s( &pLogFile, m_logFilePath.c_str( ), "w", stderr );
}
}
Программа прерывается при вызове fflush(stderr);
, Когда я не перенаправляю stderr
все, кажется, работает нормально.
Это окна, кто знает?
Попробуйте std::cerr.flush();
потому что я могу полностью видеть окна, делающие свою собственную вещь снова (например, сокеты не похожи на файлы, им нравится делать свои собственные записи IO).
Используя то, что я только что сказал выше, ставит задачу в свою стандартную библиотеку, вместо того, чтобы считать ее файлом и т.д. Помните "абстракцию", это означает, что флеш-метод - это метод, это глагол, и нам все равно, как (или в этом случае не хотите (хотите) знать), поэтому давайте просто предположим, что флеш делает то, что нужно делать !
Оставьте комментарий, если это не сработает, и я подумаю.
Я не использую Windows или Windows-телефоны (я не один из счастливчиков 24 в мире: P), но я знаю, что есть проблемы с I/O ("различия") в Windows, к счастью, MinGW и co hide их от меня :)
ИЛИ
Измените свою тактику, если мне действительно захотелось решить проблему (потому что это не ваш код) создать новый класс с именем my_error_stream или что-то еще, что расширяет std :: ostream (таким образом вы можете использовать его как std :: cerr который "является" std :: ostream ").
Поместите статический метод в вызываемый get_error_stream() или что-то, что возвращает один из двух классов, полученных из my_error_stream, один направляет прямо в std :: err, а другой - в файл.
Это зависит от того, как вам нравится ваш код выглядеть и чувствовать, я сказал так, потому что он сохраняет реализации отдельно и под их собственной "ветвью" иерархии классов.
Это на самом деле не отвечает на ваш вопрос, но ваш код кажется прекрасным, а Windows отсасывает трубы и сокеты.