Synchronizacja wątków

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 Run ten 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:
  • 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: