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 reagowanie na zdarzenia użytkownika niezależnie od wątkach wykonywanych z innych części aplikacji.Wątku głównym aplikacji (w swojej CWinApp-klasy) jest już utworzone i uruchomione.Ten temat zawiera opis kroków niezbędnych do utworzenia interfejsu użytkownika wątków.

Pierwszą rzeczą, którą 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 musi zastąpić niektóre funkcje i można zastąpić innym.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

Wykonać oczyszczanie, gdy wątek przerywa.Zazwyczaj jest wyłączona.

InitInstance

Wykonywanie inicjalizacji instancji wątku.Musi być zastąpiona.

OnIdle

Wykonaj przetwarzanie czas bezczynności zależnych od wątku.Zazwyczaj nie jest wyłączona.

PreTranslateMessage

Filtrowanie wiadomości przed wysłaniem do TranslateMessage i DispatchMessage.Zazwyczaj nie jest wyłączona.

ProcessWndProcException

Przechwycić nieobsługiwany wyjątki generowane przez programy obsługi wiadomości i polecenia dla wątku.Zazwyczaj nie jest wyłączona.

Uruchom

Kontrolowanie funkcji dla wątku.Zawiera pompy wiadomość.Rzadko jest wyłączona.

MFC zawiera dwie wersje AfxBeginThread za pomocą parametru przeciążenia: taki, który można tworzyć tylko liczba wątków, który można utworzyć wątków interfejs użytkownika lub wątków roboczych.Aby uruchomić wątku interfejsu użytkownika, wywoływać przeciążenia drugi z AfxBeginThread, zawierającą następujące informacje:

  • RUNTIME_CLASS klasy pochodzące z CWinThread.

  • (Opcjonalnie) Żądany priorytet.Ustawieniem domyślnym jest priorytet normalny.Aby uzyskać więcej informacji dotyczących dostępnych poziomów priorytetu, zobacz SetThreadPriority w Windows SDK.

  • (Opcjonalnie) Żądany rozmiar stosu dla wątku.Rozmiar stosu jest domyślnie taki sam jak rozmiar stosu wątku tworzącego.

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

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

AfxBeginThreadwykonuje większość pracy za Ciebie.Tworzy nowy obiekt klasy, inicjuje on z informacji podanych i wywołania CWinThread::CreateThread do uruchomienia na wykonywaniu wątku.Kontrole są wprowadzane w trakcie trwania procedury, żeby upewnić się, że wszystkie obiekty są zdelokowane poprawnie w przypadku gdy jakakolwiek część stworzenia się nie powiedzie.

O czym chcesz się dowiedzieć więcej?

Zobacz też

Koncepcje

Wielowątkowość z C++ i MFC