WinApi - nowe okno w nowym wątku

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!

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.

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.

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