The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Почему иксовая программа при падении икссервера падает тоже?..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Почему иксовая программа при падении икссервера падает тоже?..."  
Сообщение от FastSoft email(??) on 22-Ноя-06, 18:37 
Ну вот если ты - иксовая программа, то почему при падении иксов тебе обязательно нужно грохнуться вслед вместе с изменениями в "открытых" файлах? Нельзя что-ли циклически раз в 0.5 секунды молча и терпеливо пытаться законнектиться назад и при появлении иксов восстать в прежней красе?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Почему иксовая программа при падении икссервера падает тоже?..."  
Сообщение от perece on 22-Ноя-06, 19:22 
>Ну вот если ты - иксовая программа, то почему при падении иксов
>тебе обязательно нужно грохнуться вслед вместе с изменениями в "открытых" файлах?
>Нельзя что-ли циклически раз в 0.5 секунды молча и терпеливо пытаться
>законнектиться назад и при появлении иксов восстать в прежней красе?
а это кто как напишет. При падении сервера или связи с ним, по факту ошибки нижележащего (т.е. внутри xlib) send'a или recv'a DeviceID (хэндл, возвращенный ф-ией XOpenDisplay) становится невалидным, и любая (почти) xlib'овская ф-ия вернет ошибку, что дескать неверный id подсунули (почти все иксовые ф-ии принимают его первым параметром).
а поскольку обработку ошибок общепринято делать в виде:
rc=functiontocall(...);
if(rc != success){
  perror(success);
  exit(1);
}
или вариации на тему, то и получаем мессадж типа "connection to display :0 is broken - explicit kill or server shutdown" (печатается perror'ом)
у тех, кто и такой проверки не делает, вообще в корку валится

сделать проверку на ошибки более интелектуальной - можно. но это сильно усложнит логику программы (попробуйте представить себе что для _каждой_ ф-ии, которую вы вызываете нужно предусмотреть правильный recovery path. у вас либо получится полный кошмар из операторов goto, или какой-нть слабопонятный фреймворк, в котором последовательность вызовов считывается в цикле из какого-нть массива и выполняется по одному вызову за проход цикла)
кроме того, если вы пишите не на raw X, а, скажем, на GTK+, то необходимо чтобы вся обработка ошибок прозрачно "пробрасывалась" через тулкит. насколько знаю, в большинстве тулкитов это не сделано.

пишите на raw X, и делайте обработку. никто кроме вашей программы не знает, что есть "правильное поведение" при обрыве. соберите инициализацию (XCreateSimpleWindow,XSelectInput и проч. лабуду вызываемую при старте проги в ф-ию инициализации и делайте обработку ошибок вида:

for(;;){
  rc=functiontocall(devid, ...);
  if(rc == success) break;
  devid=initialize();
}

и буит вам щастье
(про переотрисовку только не забудьте)

\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру