Udostępnij za pośrednictwem


Wielowątkowość z C++ i MFC

Biblioteka klasy Microsoft Foundation (MFC) zapewnia obsługę aplikacji wielowątków. W tym temacie opisano procesy i wątki oraz podejście MFC do wielowątku.

Proces jest wykonywaniem wystąpienia aplikacji. Na przykład po dwukrotnym kliknięciu ikony Notatnika uruchomisz proces uruchamiający Notatnik.

Wątek jest ścieżką wykonywania w procesie. Po uruchomieniu Notatnika system operacyjny tworzy proces i rozpoczyna wykonywanie podstawowego wątku tego procesu. Gdy ten wątek zakończy się, w ten sposób proces. Ten wątek podstawowy jest dostarczany do systemu operacyjnego przez kod uruchamiania w postaci adresu funkcji. Zazwyczaj jest to adres podanej main funkcji lub WinMain .

Jeśli chcesz, możesz utworzyć dodatkowe wątki w aplikacji. Możesz to zrobić, aby obsługiwać zadania w tle lub konserwacji, gdy nie chcesz, aby użytkownik czekał na ich ukończenie. Wszystkie wątki w aplikacjach MFC są reprezentowane przez obiekty CWinThread . W większości sytuacji nawet nie trzeba jawnie tworzyć tych obiektów; Zamiast tego wywołaj funkcję pomocnika platformy AfxBeginThread, która tworzy CWinThread obiekt.

MFC rozróżnia dwa typy wątków: wątki interfejsu użytkownika i wątki robocze. Wątki interfejsu użytkownika są często używane do obsługi danych wejściowych użytkownika i reagowania na zdarzenia i komunikaty generowane przez użytkownika. Wątki procesów roboczych są często używane do wykonywania zadań, takich jak ponowne obliczanie, które nie wymagają danych wejściowych użytkownika. Interfejs API Win32 nie rozróżnia typów wątków; musi tylko znać adres początkowy wątku, aby można było rozpocząć wykonywanie wątku. MFC obsługuje wątki interfejsu użytkownika specjalnie, dostarczając pompę komunikatów dla zdarzeń w interfejsie użytkownika. CWinApp jest przykładem obiektu wątku interfejsu użytkownika, ponieważ pochodzi z CWinThread i obsługuje zdarzenia i komunikaty generowane przez użytkownika.

Szczególną uwagę należy zwrócić na sytuacje, w których więcej niż jeden wątek może wymagać dostępu do tego samego obiektu. Wielowątkowość: Porady dotyczące programowania opisują techniki, których można użyć do poruszania się po problemach, które mogą wystąpić w takich sytuacjach. Wielowątkowość: Jak używać klas synchronizacji opisuje sposób używania klas, które są dostępne do synchronizowania dostępu z wielu wątków do jednego obiektu.

Pisanie i debugowanie programowania wielowątkowego jest z natury skomplikowanym i trudnym przedsięwzięciem, ponieważ należy upewnić się, że obiekty nie są jednocześnie dostępne przez więcej niż jeden wątek. Tematy wielowątku nie uczą podstaw programowania wielowątkowego, tylko sposobu używania MFC w programie wielowątkowym. Wielowątkowe przykłady MFC zawarte w visual C++ ilustrują kilka wielowątkowych interfejsów API dodawania i win32, które nie obejmują MFC; jednak są one przeznaczone tylko do punktu wyjścia.

Aby uzyskać więcej informacji na temat sposobu obsługi procesów i wątków przez system operacyjny, zobacz Procesy i wątki w zestawie Windows SDK.

Aby uzyskać więcej informacji na temat obsługi wielowątków MFC, zobacz następujące tematy:

Zobacz też

Obsługa wielowątkowości w przypadku starszego kodu (Visual C++)