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 |
---|---|
Gdy wątek kończy działanie, należy wykonać oczyszczanie.Zazwyczaj zastąpiona. |
|
Wykonać inicjowania wystąpienia wątku.Muszą zostać zastąpione. |
|
Wykonać przetwarzania w czasie bezczynności właściwych dla wątku.Zazwyczaj nie są zastępowane. |
|
Filtrowanie wiadomości przed wysłaniem do TranslateMessage i DispatchMessage.Zazwyczaj nie są zastępowane. |
|
Przechwycić Nieobsłużone wyjątki generowane przez programy obsługi wiadomości i polecenia dla wątku.Zazwyczaj nie są zastępowane. |
|
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.