Страниц: [1]
  Печать  
Автор Тема: Прощальное окно перед падением приложения  (Прочитано 4514 раз)
pavel123__
Full Member
***
Offline Offline

Сообщений: 139


Просмотр профиля
« : Января 19, 2012, 07:30:37 pm »

Добрый день! Возможно ли сделать сабж, обрабатывая сигналы закрывающие графическое приложение?

Пытался сделать так:
Код:
void ExitHandler( int sig_number )
{
char const *btns[] = { "yes", "no" };
char ss14[256];

if(1 == PtAlert( ABW_WIN_MAIN, NULL, "GOODBAY_WINDOW", NULL, "goodbye",
           PfGenerateFontName("Sans-serif", PF_STYLE_BOLD , 14, ss14),
           2, btns, NULL, 1, 3, Pt_BLOCK_ALL ) )
{

PtExit(0);
}

где-нибудь при инициализации приложения делаем следующее

int OnInitApplication( int argc, char *argv[] )
{
signal( SIGKILL, ExitHandler );   
    signal( SIGHUP, ExitHandler );   
    signal( SIGQUIT, ExitHandler ); 
    signal( SIGILL, ExitHandler );   
    signal( SIGABRT, ExitHandler ); 
    signal( SIGDEADLK, ExitHandler );
    signal( SIGFPE, ExitHandler );   
    signal( SIGBUS, ExitHandler );   
    signal( SIGSEGV, ExitHandler );   
    signal( SIGSYS, ExitHandler );   
    signal( SIGTERM, ExitHandler ); 
   

return Pt_CONTINUE;
}

Предполагаю что я пытаюсь вывести окно в тот момент, когда графика упала - может быть можно как-то поднять её снова для того чтобы вывести окно или можно поймать сигнал падения графики для приложения?
Записан
oder
Гость
« Ответ #1 : Января 19, 2012, 10:13:58 pm »

Запускайте свою программу дополнительным процессом (launcher в английской терминологии) и пусть он ждёт на выход порождённого процесса и смотрит на код завершения. Если код завершения плохой - покаывает окно и сам завершается с плохим кодом. А если код хороший - просто завершается по-хорошему.
Записан
pavel123__
Full Member
***
Offline Offline

Сообщений: 139


Просмотр профиля
« Ответ #2 : Января 27, 2012, 12:20:08 am »

Запускайте свою программу дополнительным процессом (launcher в английской терминологии) и пусть он ждёт на выход порождённого процесса и смотрит на код завершения. Если код завершения плохой - покаывает окно и сам завершается с плохим кодом. А если код хороший - просто завершается по-хорошему.
Проще наверное написать дополнительную программу которую запускать при падении основной.
Записан
oder
Гость
« Ответ #3 : Января 27, 2012, 12:32:48 am »

Кем запускать? Упавшей программой?
Вот вам элементарный пример.

Код:
void CrashApplication()
{
  CrashApplication();
}

int main()
{
  CrashApplication();
  return 1;
}

Если её запустить - она сгенерирует либо SIGSEGV либо SIGBUS. А теперь добавьте в начале main() обработчики сигналов и попробуйте из них запустить ещё один процесс.
Записан
pavel123__
Full Member
***
Offline Offline

Сообщений: 139


Просмотр профиля
« Ответ #4 : Января 31, 2012, 10:17:23 am »

Кем запускать? Упавшей программой?
Вот вам элементарный пример.

Код:
void CrashApplication()
{
  CrashApplication();
}

int main()
{
  CrashApplication();
  return 1;
}
Ну да, так и сделал, спасибо.

Если её запустить - она сгенерирует либо SIGSEGV либо SIGBUS. А теперь добавьте в начале main() обработчики сигналов и попробуйте из них запустить ещё один процесс.
Записан
oder
Гость
« Ответ #5 : Января 31, 2012, 01:16:34 pm »

Ну да, так и сделал, спасибо.

"Издевается!" - подумал Штирлиц. Smiley
Записан
Страниц: [1]
  Печать  
 
Перейти в: