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 |
---|---|
Wykonać oczyszczanie, gdy wątek przerywa.Zazwyczaj jest wyłączona. |
|
Wykonywanie inicjalizacji instancji wątku.Musi być zastąpiona. |
|
Wykonaj przetwarzanie czas bezczynności zależnych od wątku.Zazwyczaj nie jest wyłączona. |
|
Filtrowanie wiadomości przed wysłaniem do TranslateMessage i DispatchMessage.Zazwyczaj nie jest wyłączona. |
|
Przechwycić nieobsługiwany wyjątki generowane przez programy obsługi wiadomości i polecenia dla wątku.Zazwyczaj nie jest wyłączona. |
|
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.