Udostępnij za pośrednictwem


Wielowątkowość: Tworzenie wątków interfejsu użytkownika

Wątek interfejsu użytkownika jest powszechnie używany do obsługi danych wejściowych użytkownika i reagowania na zdarzenia użytkownika niezależnie od wątków wykonujących innych elementów aplikacji.Wątku głównym aplikacji (w swojej CWinApp-klasy) jest już utworzone i uruchomione.W tym temacie opisano kroki potrzebne do tworzenia wątków interfejsu użytkownika.

Pierwszą rzeczą, należy wykonać podczas tworzenia wątku interfejsu użytkownika jest pochodzić od klasy z CWinThread.Należy zadeklarować i zaimplementowania tej klasy, za pomocą DECLARE_DYNCREATE i IMPLEMENT_DYNCREATE makra.Ta klasa należy zastąpić niektóre funkcje, można zmienić, inne osoby.W poniższej tabeli przedstawiono te funkcje i co należy zrobić.

Funkcje, aby zastąpić podczas tworzenia wątku interfejsu użytkownika

Funkcja

Cel

ExitInstance

Gdy wątek kończy działanie, należy wykonać oczyszczanie.Zazwyczaj zastąpiona.

InitInstance

Wykonać inicjowania wystąpienia wątku.Muszą zostać zastąpione.

OnIdle

Wykonać przetwarzania w czasie bezczynności właściwych dla wątku.Zazwyczaj nie są zastępowane.

PreTranslateMessage

Filtrowanie wiadomości przed wysłaniem do TranslateMessage i DispatchMessage.Zazwyczaj nie są zastępowane.

ProcessWndProcException

Przechwycić Nieobsłużone wyjątki generowane przez programy obsługi wiadomości i polecenia dla wątku.Zazwyczaj nie są zastępowane.

Uruchom

Kontrolowanie funkcji wątku.Zawiera pompowania komunikatów.Rzadko zastąpiona.

MFC zawiera dwie wersje AfxBeginThread poprzez parametr przeciążenia: takie, które można tworzyć tylko wątków roboczych, który można utworzyć interfejsu użytkownika wątków lub wątków roboczych.Aby uruchomić wątku interfejsu użytkownika, wywoływać przeciążenie drugi z AfxBeginThread, zawierającą następujące informacje:

  • RUNTIME_CLASS klasy pochodzące z CWinThread.

  • (Opcjonalnie) Poziom priorytetu pożądany.Wartością domyślną jest priorytet normalny.Aby uzyskać więcej informacji na temat poziomów priorytetu dostępne zobacz SetThreadPriority w Windows SDK.

  • (Opcjonalnie) Żądany rozmiar stosu wątku.Wartość domyślna to ten sam rozmiar stosu jako wątek, który.

  • (Opcjonalnie) CREATE_SUSPENDED Jeśli wątek ma być utworzony w stanie wstrzymania.Wartość domyślna jest równa 0 lub wątek uruchamia się normalnie.

  • (Opcjonalnie) Atrybuty żądanych zabezpieczeń.Wartością domyślną jest taki sam dostęp, jak wątek nadrzędny.Aby uzyskać więcej informacji o formacie informacji o zabezpieczeniach, zobacz SECURITY_ATTRIBUTES w Windows SDK.

AfxBeginThreadwykonuje większość pracy za Ciebie.Kreator tworzy nowy obiekt klasy, inicjuje ją z informacji podanych i połączeniami CWinThread::CreateThread zaczął wykonywać wątek.Kontrole są wprowadzane w czasie całej procedury upewnij się, że wszystkie obiekty są deallocated poprawnie niezastosowania się jakiejkolwiek części Tworzenie.

Co chcesz dowiedzieć się więcej?

Zobacz też

Koncepcje

Wielowątkowość C++ i MFC