WinApi - nowe okno w nowym wątku

Odpowiedz Nowy wątek
2014-12-28 14:37
NowyMS
0

Witam, dopiero drążę temat więc proszę o wyrozumiałość.
Planuję zrobić aplikację w WinApi (windows) w taki sposób, że będzie okno główne i kilka okien dzieci ew. niezależnych okien.
Procedura okna będzie wspólna dla wszystkich okien tj. coś w stylu:

LRESULT CALLBACK IWindow::MsgRouter(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    if(message == WM_NCCREATE)
        {
        IWindow* current_window = (IWindow*)(((CREATESTRUCT*)lParam)->lpCreateParams);
        SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)current_window);
        }
 
    IWindow* current_window = (IWindow*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
 
    if(current_window)
        return current_window->WndProc(hWnd, message, wParam, lParam);
    else
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

Teraz pytanie: czy jeśli chciałbym utworzyć okna dzieci lub niezależne okna w innym wątku to czy jest to ogólnie bezpieczne? Tzn. chodzi mi o aspekt wspólnej funkcji komunikatów oraz o pętlę komunikatów, która będzie wysyłać odpowiednie sygnały do okien?

Na razie to tyle, bo dopiero myślę nad tym co chcę zrobić i nad wszelkimi konsekwencjami ;-).

Z góry dzięki za pomoc!

Pozostało 580 znaków

2014-12-28 21:55
0

Jeśli zrobisz to zachowując zasady thread-safe to będzie OK...
pętla komunikatów musi być w każdym wątku, przecież na czymś wątek musi się „zakręcić”, inaczej po utworzeniu okna się zakończy.

do komunikacji między oknami używaj raczej PostMessage a nie SendMessage; z tym ostatnim spodziewałbym się problemów.

.. ale tak się zwykle nie robi. można przecież mieć wiele okien w jednym wątku.

Pozostało 580 znaków

2014-12-28 23:04
NowyMS
0

Dzięki @Azarien za odpowiedź. Po wstępnym przeanalizowaniu tematu również doszedłem do wniosku, że lepszym rozwiązaniem będzie utworzenie wszystkich okien w głównym wątku a same obliczenia dać do innych wątków.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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