Globalny kontekst urządzenia - WinApi

0

Cześć, od niedawna bawię się w WinApi w C++ i mam do was takie pytanie:
Przeczytałem, że kontekst urządzenia należy bezwzględnie zwalniać zaraz po jego wykorzystaniu. Nawet jeśli często z niego korzystamy to należy go za każdym razem ładować i zwalniać...
No i zastanawiam się dlaczego i czy jest w tym sens? Jedyną odpowiedź, którą udało mi się znaleźć, na pytanie dlaczego tak, to taka, że kontekstów urządzenia jest ograniczona ilość i szybko mogą się skończyć.
Zastanawiam się jednak czy da się jakoś sprawdzić (oszacować) ile takich kontekstów urządzenia jest u mnie na komputerze do dyspozycji?
Czy są jakieś inne wady, gdybym chciał zainicjować taką strukturę np. globalnie -> załadować kontekst zaraz po utworzeniu okna -> i zwolnić go tuż przed zakończeniem programu?
W zasadzie to planowałem taki kontekst dać w mojej klasie Window i wówczas każde okno miałoby swój własny kontekst... Do tego w konstruktorze byłby on ładowany a w destruktorze zwalniany, co rozwiązałoby problem martwienia się w tym zakresie ;-).
Co wy na to?

2

Pytanie: dlaczego chcesz walczyć z Windowsem, który został zaprojektowany tak a nie inaczej, i próba obejścia tego może się skończyć tylko na twoją niekorzyść? (wyciekiem zasobów albo zmuleniem systemu)

Jeśli wywołasz RegisterClass z flagą CS_OWNDC, to okno będzie miało przydzielony swój własny kontekst (GetDC zwróci zawsze ten sam uchwyt, a ReleaseDC na nim nic nie zrobi). Ale używa się tego głównie do OpenGL...

Nie kombinuj. Rób tak jak każą: GetDC kiedy potrzebujesz i ReleaseDC kiedy skończysz.

W C++ możesz to sobie opakować w klasę:

{
    MyDC dc(hwnd); // GetDC w konstruktorze
    ...
    // ReleaseDC w destruktorze
}

ale nie zastanawiałem się czy to będzie dobry pomysł.

0

Może i masz rację ;-)
Co do opakowania w klasę to również o tym myślałem i chyba właśnie tak zrobię.
dzięki.

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