Writing /home/grochu/public_html/wiki/data/cache/e/e586a714af50a1bef943c87be2f5b9bd.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/5/54833d99260c996c979a12bbe574f33c.xhtml failed
Synchronizacja wątków
Zadanie 1 - Komunikator tekstowy z wieloma klientami c. d.
Rozszerz aplikację z poprzednich zajęć w następujący sposób:
- w momencie wyczerpania wszystkich możliwych połączeń wątek główny serwera czeka na zakończenie przynajmniej jednego z wątków odpowiedzialnych za połączenia z klientami. Dopiero wtedy możliwe staje się ponowne zaakceptowanie nowego połączenia. Wykorzystaj w tym celu funkcję WaitForMultipleObjects
- po uruchomieniu serwera przyciskiem
Runten sam przycisk pozwala wyłączyć serwer. W momencie wyłączenia serwera do wszystkich połączonych klientów prześlij komunikat pożegnalny i zakończ wątki odpowiedzialne za połączenia oraz wątek główny serwera. Do komunikacji między wątkami wykorzystaj zdarzenia. Przydatne funkcje:- CreateEvent tworzy uchwyt do obiektu zdarzenia
- SetEvent ustawia obiekt zdarzenia w stanie sygnalizującym zajście zdarzenia
- ResetEvent przywraca pierwotny stan zdarzenia
- zabezpiecz dane modyfikowane przez wątki tak aby wyłącznie jeden wątek mógł modyfikować i odczytywać współdzielone zasoby (np. zmienne globalne). Wykorzystaj w tym celu sekcje krytyczne. Przydatne funkcje:
Uruchom aplikację w debuggerze Visual Studio i prześledź działanie wątków oraz możliwości VS w śledzeniu działania aplikacji wielowątkowych.
Źródła:
- szablon aplikacji serwerowej czat_serwer2.cpp
- przykładowa aplikacja kliencka, którą można wykorzystać do testów czat_klient.cpp