Udostępnij za pośrednictwem


Wielowątkowość z C++ i MFC

Biblioteka Microsoft Foundation Class (MFC) zapewnia obsługę aplikacji wielowątkowych.ten temat opisuje procesy i ciągi oraz podejście MFC do wielowątkowości.

Proces wykonuje wystąpienie aplikacji.Na przykład klikając dwukrotnie ikonę Notatnika, uruchamiasz proces, który włącza Notatnik.

Wątek jest ścieżką wykonywania w ramach procesu.Kiedy uruchamiasz Notepad, system operacyjny tworzy proces i rozpoczyna wykonywanie podstawowego wątku tego procesu.Kiedy ten wątek kończy, kończy również proces.Główny wątek jest dostarczony do systemu operacyjnego przez kod startowy w formie adresu funkcji.Zwykle dostarczany jest adres głównego lub WinMain funkcyjnego.

Jeżeli chcesz, możesz utworzyć dodatkowe wątki w swojej aplikacji.Takie rozwiązanie pozwoli obsługiwać zadania w tle lub zadania konserwacji w sytuacji, gdy nie chcemy, żeby użytkownik czekał aż się zakończą.Wszystkie wątki w aplikacjach MFC są reprezentowane przez CWinThread obiekty.W większości przypadków nie trzeba nawet jawnie tworzyć tych obiektów; zamiast tego, wywołaj funkcję pomocnika szablonu AfxBeginThread, która tworzy obiekt CWinThread dla Ciebie.

MFC wyróżnia dwa rodzaje wątków: wątki interfejsu użytkownika i wątki robocze.Wątki interfejsu użytkownika są często używane, aby obsługiwać dane wejściowe użytkownika i odpowiadać na zdarzenia i komunikaty generowane przez użytkownika.Wątki robocze są powszechnie używane do kończenia zadań, takich jak ponowne obliczenie, które nie wymagają wkładu użytkownika.Win32 API nie rozróżnia typów wątków; musi jedynie znać adres początkowy wątku, aby zacząć realizować wątek.MFC obsługuje wątki interfejsu użytkownika specjalnie poprzez dostarczanie funkcji „pompy komunikatów” zdarzeń w interfejsie użytkownika.CWinApp jest przykładem obiektu wątku interfejsu użytkownika, ponieważ pochodzi od CWinThread i obsługuje zdarzenia i komunikaty generowane przez użytkownika.

Szczególną uwagę należy poświęcić sytuacjom, w których więcej niż jeden wątek może wymagać dostępu do tego samego obiektu.Wielowątkowość: porady dotyczące programowania opisuje metody, których można użyć, aby uniknąć problemów, które mogą powstać w takich sytuacjach.Wielowątkowość: jak korzystać z klas synchronizacji opisuje sposób użycia klas, które są dostępne do synchronizowania dostępu przez wiele wątków do pojedynczego obiektu.

Pisanie i debugowanie wielowątkowego programowania jest skomplikowanym i trudnym przedsięwzięciem, ponieważ należy upewnić się, że do obiektów nie ma dostępu więcej niż jeden wątek jednocześnie.Tematy o wielowątkowości nie uczą podstaw programowania wielowątkowe, lecz jak używać MFC w programach wielowątkowych.Wielowątkowe próbki MFC zawarte w programie Visual C++ ilustrują kilka wielowątkowych dodanych funkcji API Win32 i nie wchodzą w skład MFC; jednak mają one tylko stanowić punkt wyjścia.

Aby uzyskać więcej informacji dotyczących tego, jak system operacyjny obsługuje procesy i wątki, zobacz Procesy i wątki w Windows SDK.

Aby uzyskać więcej informacji dotyczących wielowątkowej obsługi MFC, zobacz następujące tematy:

Zobacz też

Koncepcje

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