crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Как закрыть файл при закрытии приложения
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
silver47 Дата 6.4.2011, 6:05
 
Цитата(Алексей1153 @ 5.4.2011, 22:17) *
abc, а с flush тоже не пишется ?


В случае, если используется QTextStream для вывода в файл, то flush бесполезен.
void QTextStream::flush ()
Flushes any buffered data waiting to be written to the device.
If QTextStream operates on a string, this function does nothing.

Если писать в файл напрямую, не используя QTextStream, то QFile::flush решает проблему. Я ее все-же предпочел решить по другому - держать файл закрытым (в лог сыплются лишь сообщения об ошибках), теперь вопрос в другом, так сказать для общего развития: Как узнать что твое приложения прибили тем или иным способом? Как я понимаю платформонезависимо никак.
abc Дата 5.4.2011, 20:36
  хмм, ладно, надо провести более качественные проверки для продолжения беседы)
Алексей1153 Дата 5.4.2011, 20:25
  abc, возможно, оператор << у них по разному устроен - в одном flush вызывается, в другом нет
abc Дата 5.4.2011, 20:20
  не пробовал, но если даже пишется, то вопрос изменится на - почему QString записать нужен flush, а QPixmap нет... :)
Алексей1153 Дата 5.4.2011, 20:17
  abc, а с flush тоже не пишется ?
abc Дата 5.4.2011, 20:06
  я в винде компилировал, QString не пишется, QPixmap пишется... Как может не успеть записаться? дальше этих двух типов не проверял
Алексей1153 Дата 5.4.2011, 19:42
  abc,

ну да, если что-то не успело записаться, то оно и не сохранится. А по топику в ссылке, навскидку:

вызывать flush после каждой записи - это гарантия перекидывания в файл из внутренних буферов. А close там ни при чём ИМХО

опять же, тонкости работы линукса я не знаю, а в винде файл просто закроется и ничего не потеряется из уже в него записанного :)
abc Дата 5.4.2011, 19:33
  Алексей, что происходит здесь?
http://www.forum.crossplatform.ru/index.php?showtopic=6720
Алексей1153 Дата 5.4.2011, 17:05
  вообще говоря, достаточно просто всегда записывать данные в файл. Когда приложение умирает, система закрывает все дескрипторы, занятые приложением - файл автоматом закроется. По крайней мере в винде так :)
wiz29 Дата 5.4.2011, 13:26
  1. менять не обязательно.
2. std::set_terminate работает следующим образом: если в какойто части программы возникает исключительная ситуация exception и данная ситуация не обработана ни одним перехватчиком искл. ситуаций то приложение аварийно завершается, перед своим завершением вызываться некая специальная глобальная функция terminate handler , собственно указатель на нее и устанавливает данный метод (это коротко , на "палцах") за более подробной инфой обратитесь к справочникам по C++. При закрытии консольного окна "через крестик" реально сам не смог отловить завершение.

Средставми Qt закрытие консоли с помощью Сtr + C или Alt + F4 скорее всего обработать не выйдет, придется писать платформозависимый код. (других путей пока не вижу)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 2:46