Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
wiz29 |
5.4.2011, 12:22
Сообщение
#11
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12
|
Цитата(silver47 @ 5.4.2011, 12:02) Link Простите. Совсем не понял. Объект "логгер" пишет в файл события, которые происходят при обработке данных другими классами, они кидают ему их посредством сигналов. Другие классы должны выполняться в лупе, то есть всегда, это не парсер чего-либо. Если они выполнили свою работу они уничтожаются, родительский класс создает новый объект, как только работа появиться. Надеюсь понятно объяснил. Невижу никаких проблем с тем чтобы ваш "логгер" был глобальным в приложении (даже если он потомок QObject) или же у вас есть некий общий файл в который все "сливается" с разных объектов (т.е. разделенный доступ к лог файлу)? (тогда здесь не все понятно с синхронизацией доступа к файлу). p.s. Что конкретно не понятно? (синглтон - объект одиночка для всего приложения, в qt например, это QCoreApplication объект, как правило имеет метод instance() или нечто подобное) кстати обработка сигнала aboutToQuit нормально работает только при корректном завершении приложения: вызовом метода QCoreApplication::instance()->quit(); в остальных случая код завершения не 0 и сигнал не генерится. |
|
|
|
|
silver47 |
5.4.2011, 12:41
Сообщение
#12
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6
|
Логгер глобальный и один для всех объектов.
Конкретно не понятно как работает set_terminate. По примеру мы устанавливаем метод, который будет вызываться в случае ненормального завершения программы. Это так? зачем тогда заменять a.exec(); на int res = a.exec();? Если сделать все чисто по примеру, то вроде как не работает. Добавил консоль в сборку: По Ctrl+C тихо закрывается. Ничего не оставляет после себя. Если вставить throw; до return a.exec() то исключение вызывает метод abnormalExit. Сообщение отредактировал silver47 - 5.4.2011, 12:57 |
|
|
|
|
wiz29 |
5.4.2011, 13:26
Сообщение
#13
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12
|
1. менять не обязательно.
2. std::set_terminate работает следующим образом: если в какойто части программы возникает исключительная ситуация exception и данная ситуация не обработана ни одним перехватчиком искл. ситуаций то приложение аварийно завершается, перед своим завершением вызываться некая специальная глобальная функция terminate handler , собственно указатель на нее и устанавливает данный метод (это коротко , на "палцах") за более подробной инфой обратитесь к справочникам по C++. При закрытии консольного окна "через крестик" реально сам не смог отловить завершение. Средставми Qt закрытие консоли с помощью Сtr + C или Alt + F4 скорее всего обработать не выйдет, придется писать платформозависимый код. (других путей пока не вижу) |
|
|
|
|
Алексей1153 |
5.4.2011, 17:05
Сообщение
#14
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
вообще говоря, достаточно просто всегда записывать данные в файл. Когда приложение умирает, система закрывает все дескрипторы, занятые приложением - файл автоматом закроется. По крайней мере в винде так
|
|
|
|
|
abc |
5.4.2011, 19:33
Сообщение
#15
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4
|
Алексей, что происходит здесь?
Link |
|
|
|
|
Алексей1153 |
5.4.2011, 19:42
Сообщение
#16
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
abc,
ну да, если что-то не успело записаться, то оно и не сохранится. А по топику в ссылке, навскидку: вызывать flush после каждой записи - это гарантия перекидывания в файл из внутренних буферов. А close там ни при чём ИМХО опять же, тонкости работы линукса я не знаю, а в винде файл просто закроется и ничего не потеряется из уже в него записанного Сообщение отредактировал Алексей1153 - 5.4.2011, 19:42 |
|
|
|
|
abc |
5.4.2011, 20:06
Сообщение
#17
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4
|
я в винде компилировал, QString не пишется, QPixmap пишется... Как может не успеть записаться? дальше этих двух типов не проверял
Сообщение отредактировал abc - 5.4.2011, 20:08 |
|
|
|
|
Алексей1153 |
5.4.2011, 20:17
Сообщение
#18
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
abc, а с flush тоже не пишется ?
|
|
|
|
|
abc |
5.4.2011, 20:20
Сообщение
#19
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4
|
не пробовал, но если даже пишется, то вопрос изменится на - почему QString записать нужен flush, а QPixmap нет...
|
|
|
|
|
Алексей1153 |
5.4.2011, 20:25
Сообщение
#20
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
abc, возможно, оператор << у них по разному устроен - в одном flush вызывается, в другом нет
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 28.12.2025, 5:17 |