Poinformowanie programu o jego zamknięciu

0

Cześć.

Napisałem program w C. Jest to prosty programik odczytujący stan baterii i rysujący pasek z wizualizacją ile pozostało energi w lapsie. Program działa pod systemem linux, został napisany w C. Żeby było lekko i prosto nie używam gtk czy qt tylko czystego xlib z X11. Same rysowanie paska, odczyt energi czy reakcje na zmniejszenie pojemności już mam. Problem polega na zamknięciu programu. Całość jest umieszczona w nieskończonej pętli, więc nigdy sie nie kończy. Nie jest to problemem bo mogę zrobić kill na procesie i program się zabija. O ile przy wyłączaniu laptopa jest ok, to czasami jak zabijam go podczas pracy laptopa mam obawy o pamięć. Teoretycznie nie czysczę pamięci po oknie, ekranie, ort! etc. Nie wiem co sie dzieje z pamięcią po skillowaniu procesu - linux ja "odzyskuje", czy powoduje to wyciek i już nigdy ta pamieć nie zostanie użyta ?? Jak w takim programie zrobić coś w rodzaju destruktora ?? Teoretycznie może to byc funckja sprzątająca, ale, jak mogę się zorientować, że ktoś chce mnie skillować skoro w nieskończonej pętli odczytuje baterie i rysuję ?? Próbowałem z XEventami, jednak odczyt xeventów ort! mi program aż nie nadszedł sygnał, a ja chce w tym czasie odczytywać stan baterii. Pierwszy pomysł to zrobić to na ptreads - jeden wątek do odczytu ort!, jednen do rysowania i jeden do odczytywania eventów. Jak pójdzie event zamknij to wtedy oznaczam, żeby wątki sie zakończyły, sprzątam i wyłączam - co sądzicie ?? Da sie to zrobić prościej bez ptreads ??

Dalej, jeżeli mam proces np. icewm, który uruchamia mój program to killowania icewm, spowoduje skillowanie mojego programu - jaki event zostanie przesłany do mojego programu przez icewm czy wszystko pójdzie z czapy i nici ze sprzątaniem pamięci ??

Dzięki za pomoc !

0

Ok, doznałem zaćmienia. Z okolic pnia mózgu doszedł do mnie szept ... signals... no i mam. Temat w zasadzie do kosza, lub lepiej - jak ktoś będzie miał podobny problem do rozwiązania to niech zarejestruje callback do łapania sygnałów i załatwione ! http://www.gnu.org/software/libc/manual/html_node/Handler-Returns.html#Handler-Returns

1 użytkowników online, w tym zalogowanych: 0, gości: 1