CWinThread
Klasa
Reprezentuje wątek wykonywania w aplikacji.
Składnia
class CWinThread : public CCmdTarget
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CWinThread::CWinThread |
CWinThread Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CWinThread::CreateThread |
Rozpoczyna wykonywanie CWinThread obiektu. |
CWinThread::ExitInstance |
Zastąpić, aby wyczyścić, gdy wątek zakończy się. |
CWinThread::GetMainWnd |
Pobiera wskaźnik do głównego okna wątku. |
CWinThread::GetThreadPriority |
Pobiera priorytet bieżącego wątku. |
CWinThread::InitInstance |
Zastąpić, aby wykonać inicjowanie wystąpienia wątku. |
CWinThread::IsIdleMessage |
Sprawdza, czy są wyświetlane specjalne wiadomości. |
CWinThread::OnIdle |
Zastąpić, aby wykonać przetwarzanie bezczynności specyficzne dla wątku. |
CWinThread::PostThreadMessage |
Publikuje komunikat do innego CWinThread obiektu. |
CWinThread::PreTranslateMessage |
Filtruje komunikaty przed ich wysłaniem do funkcji TranslateMessage systemu Windows i DispatchMessage . |
CWinThread::ProcessMessageFilter |
Przechwytuje niektóre komunikaty przed dotarciem do aplikacji. |
CWinThread::ProcessWndProcException |
Przechwytuje wszystkie nieobsługiwane wyjątki zgłaszane przez programy obsługi komunikatów i poleceń wątku. |
CWinThread::PumpMessage |
Zawiera pętlę komunikatu wątku. |
CWinThread::ResumeThread |
Dekrementuje liczbę wstrzymywanie wątku. |
CWinThread::Run |
Sterowanie funkcją wątków za pomocą pompy komunikatów. Zastąpij, aby dostosować domyślną pętlę komunikatów. |
CWinThread::SetThreadPriority |
Ustawia priorytet bieżącego wątku. |
CWinThread::SuspendThread |
Zwiększa liczbę wstrzymywanie wątku. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CWinThread::operator HANDLE |
Pobiera uchwyt CWinThread obiektu. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CWinThread::m_bAutoDelete |
Określa, czy należy zniszczyć obiekt po zakończeniu wątku. |
CWinThread::m_hThread |
Dojście do bieżącego wątku. |
CWinThread::m_nThreadID |
Identyfikator bieżącego wątku. |
CWinThread::m_pActiveWnd |
Wskaźnik do głównego okna aplikacji kontenera, gdy serwer OLE jest aktywny. |
CWinThread::m_pMainWnd |
Przechowuje wskaźnik do głównego okna aplikacji. |
Uwagi
Główny wątek wykonywania jest zwykle dostarczany przez obiekt pochodzący z CWinApp
; CWinApp
pochodzi z CWinThread
. Dodatkowe CWinThread
obiekty zezwalają na wiele wątków w danej aplikacji.
Istnieją dwa ogólne typy wątków, które CWinThread
obsługują: wątki robocze i wątki interfejsu użytkownika. Wątki robocze nie mają pompy komunikatów: na przykład wątek wykonujący obliczenia w tle w aplikacji arkusza kalkulacyjnego. Wątki interfejsu użytkownika mają pompę komunikatów i przetwarzają komunikaty odebrane z systemu. CWinApp
klasy i pochodzące z nich są przykładami wątków interfejsu użytkownika. Inne wątki interfejsu użytkownika mogą również pochodzić bezpośrednio z CWinThread
elementu .
Obiekty klasy CWinThread
zwykle istnieją przez czas trwania wątku. Jeśli chcesz zmodyfikować to zachowanie, ustaw wartość m_bAutoDelete
FALSE
.
Klasa jest niezbędna CWinThread
, aby kod i MFC były w pełni bezpieczne wątkowo. Dane lokalne wątku używane przez platformę do obsługi informacji specyficznych dla wątków są zarządzane przez CWinThread
obiekty. Ze względu na tę zależność od CWinThread
obsługi danych lokalnych wątków każdy wątek korzystający z MFC musi zostać utworzony przez MFC. Na przykład wątek utworzony przez funkcję _beginthread
_beginthreadex
czasu wykonywania nie może używać żadnych interfejsów API MFC.
Aby utworzyć wątek, wywołaj metodę AfxBeginThread
. Istnieją dwie formy, w zależności od tego, czy potrzebujesz wątku procesu roboczego, czy interfejsu użytkownika. Jeśli chcesz, aby wątek interfejsu użytkownika został przekazany do AfxBeginThread
wskaźnika do CRuntimeClass
klasy pochodnej CWinThread
. Jeśli chcesz utworzyć wątek procesu roboczego, przekaż wskaźnik do AfxBeginThread
funkcji sterującej i parametr do funkcji sterującej. W przypadku wątków roboczych i wątków interfejsu użytkownika można określić opcjonalne parametry, które modyfikują priorytet, rozmiar stosu, flagi tworzenia i atrybuty zabezpieczeń. AfxBeginThread
Funkcja zwróci wskaźnik do nowego CWinThread
obiektu.
Zamiast wywoływać AfxBeginThread
metodę , można skonstruować obiekt pochodny, a następnie wywołać metodę CWinThread
CreateThread
. Ta dwuetapowa metoda konstruowania jest przydatna, jeśli chcesz ponownie użyć CWinThread
obiektu między kolejnymi operacjami tworzenia i kończenia wykonywania wątków.
Aby uzyskać więcej informacji na temat CWinThread
programu , zobacz artykuły Multithreading with C++ and MFC, Multithreading: Creating User-Interface Threads, Multithreading: Creating Worker Threads, and Multithreading: How to use the Synchronization Classes (Tworzenie wątków wielowątków: tworzenie wątków procesów roboczych i wielowątkowanie: jak używać klas synchronizacji).
Hierarchia dziedziczenia
CWinThread
Wymagania
Nagłówek: afxwin.h
CWinThread::CreateThread
Tworzy wątek do wykonania w przestrzeni adresowej procesu wywołującego.
BOOL CreateThread(
DWORD dwCreateFlags = 0,
UINT nStackSize = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
Parametry
dwCreateFlags
Określa dodatkową flagę, która kontroluje tworzenie wątku. Ta flaga może zawierać jedną z dwóch wartości:
CREATE_SUSPENDED
Rozpocznij wątek z liczbą wstrzymania jednego. UżyjCREATE_SUSPENDED
polecenia , jeśli chcesz zainicjować dowolne daneCWinThread
składowe obiektu, takie jakm_bAutoDelete
lub jakiekolwiek elementy członkowskie klasy pochodnej, przed uruchomieniem wątku. Po zakończeniu inicjowania użyj polecenia ,CWinThread::ResumeThread
aby uruchomić wątek. Wątek nie zostanie wykonany, dopókiCWinThread::ResumeThread
nie zostanie wywołany.0 Uruchom wątek natychmiast po utworzeniu.
nStackSize
Określa rozmiar w bajtach stosu dla nowego wątku. Jeśli wartość 0, rozmiar stosu jest domyślnie taki sam jak rozmiar podstawowego wątku procesu.
lpSecurityAttrs
Wskazuje strukturę określającą SECURITY_ATTRIBUTES
atrybuty zabezpieczeń wątku.
Wartość zwracana
Nonzero, jeśli wątku został utworzony pomyślnie; w przeciwnym razie 0.
Uwagi
Użyj AfxBeginThread
polecenia , aby utworzyć obiekt wątku i wykonać go w jednym kroku. Użyj polecenia CreateThread
, jeśli chcesz ponownie użyć obiektu wątku między kolejnym tworzeniem i kończeniem wykonywania wątków.
CWinThread::CWinThread
CWinThread
Tworzy obiekt.
CWinThread();
Uwagi
Aby rozpocząć wykonywanie wątku, wywołaj funkcję składową CreateThread
. Zazwyczaj tworzy się wątki przez wywołanie AfxBeginThread
metody , co spowoduje wywołanie tego konstruktora i CreateThread
.
CWinThread::ExitInstance
Wywoływana przez platformę z rzadko zastępowanej Run
funkcji składowej w celu zakończenia tego wystąpienia wątku lub w przypadku niepowodzenia wywołania InitInstance
.
virtual int ExitInstance();
Wartość zwracana
Kod zakończenia wątku; Wartość 0 nie wskazuje błędów, a wartości większe niż 0 wskazują błąd. Tę wartość można pobrać przez wywołanie metody GetExitCodeThread
.
Uwagi
Nie należy wywoływać tej funkcji składowej z dowolnego miejsca, ale w ramach funkcji składowej Run
. Ta funkcja składowa jest używana tylko w wątkach interfejsu użytkownika.
Domyślna implementacja tej funkcji usuwa obiekt , CWinThread
jeśli m_bAutoDelete
ma wartość TRUE
. Zastąpi tę funkcję, jeśli chcesz wykonać dodatkowe czyszczenie po zakończeniu wątku. Implementacja ExitInstance
polecenia powinna wywołać wersję klasy bazowej po wykonaniu kodu.
CWinThread::GetMainWnd
Jeśli aplikacja jest serwerem OLE, wywołaj tę funkcję, aby pobrać wskaźnik do aktywnego okna głównego aplikacji zamiast bezpośrednio odwoływać się do m_pMainWnd
elementu członkowskiego obiektu aplikacji.
virtual CWnd* GetMainWnd();
Wartość zwracana
Ta funkcja zwraca wskaźnik do jednego z dwóch typów okien. Jeśli wątek jest częścią serwera OLE i ma obiekt, który jest aktywny w aktywnym kontenerze, ta funkcja zwraca CWinApp::m_pActiveWnd
element członkowski CWinThread
danych obiektu.
Jeśli w kontenerze nie ma aktywnego obiektu lub aplikacja nie jest serwerem OLE, ta funkcja zwraca m_pMainWnd
element członkowski danych obiektu wątku.
Uwagi
W przypadku wątków interfejsu użytkownika jest to równoważne bezpośrednio odwołującemu się do m_pActiveWnd
elementu członkowskiego obiektu aplikacji.
Jeśli aplikacja nie jest serwerem OLE, wywołanie tej funkcji jest równoważne bezpośrednio odwołującemu się do m_pMainWnd
elementu członkowskiego obiektu aplikacji.
Zastąpi tę funkcję, aby zmodyfikować zachowanie domyślne.
CWinThread::GetThreadPriority
Pobiera bieżący poziom priorytetu wątku tego wątku.
int GetThreadPriority();
Wartość zwracana
Poziom priorytetu bieżącego wątku w klasie priorytetu. Zwrócona wartość będzie jedną z następujących wartości wymienionych z najwyższego priorytetu do najniższego:
THREAD_PRIORITY_TIME_CRITICAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_IDLE
Aby uzyskać więcej informacji na temat tych priorytetów, zobacz SetThreadPriority
w zestawie Windows SDK.
CWinThread::InitInstance
InitInstance
należy zastąpić, aby zainicjować każde nowe wystąpienie wątku interfejsu użytkownika.
virtual BOOL InitInstance();
Wartość zwracana
Inicjalizacja niezerowa, jeśli inicjowanie zakończyło się pomyślnie; w przeciwnym razie 0.
Uwagi
Zazwyczaj przesłonięć InitInstance
zadania, które należy wykonać po utworzeniu wątku.
Ta funkcja składowa jest używana tylko w wątkach interfejsu użytkownika. Wykonaj inicjowanie wątków procesów roboczych w funkcji sterującej przekazanej do AfxBeginThread
.
CWinThread::IsIdleMessage
Zastąpi tę funkcję, aby nie OnIdle
być wywoływana po wygenerowaniu określonych komunikatów.
virtual BOOL IsIdleMessage(MSG* pMsg);
Parametry
pMsg
Wskazuje na przetwarzany bieżący komunikat.
Wartość zwracana
Niezerowa, jeśli OnIdle
powinna być wywoływana po przetworzeniu komunikatu; w przeciwnym razie 0.
Uwagi
Domyślna implementacja nie wywołuje OnIdle
nadmiarowych komunikatów myszy i komunikatów generowanych przez daszki.
Jeśli aplikacja utworzyła krótki czasomierz, OnIdle
będzie wywoływana często, powodując problemy z wydajnością. Aby poprawić wydajność aplikacji, przesłoń IsIdleMessage
klasę pochodną aplikacji CWinApp
, aby sprawdzić WM_TIMER
komunikaty w następujący sposób:
BOOL CMyWinApp::IsIdleMessage(MSG* pMsg)
{
if (!CWinApp::IsIdleMessage(pMsg) || pMsg->message == WM_TIMER)
return FALSE;
else
return TRUE;
}
Obsługa WM_TIMER
w ten sposób poprawi wydajność aplikacji korzystających z krótkich czasomierzy.
CWinThread::m_bAutoDelete
Określa, czy CWinThread
obiekt powinien zostać automatycznie usunięty po zakończeniu wątku.
BOOL m_bAutoDelete;
Uwagi
Element m_bAutoDelete
członkowski danych jest publiczną zmienną typu BOOL.
Wartość m_bAutoDelete
nie ma wpływu na sposób zamknięcia bazowego uchwytu wątku, ale ma wpływ na czas zamknięcia uchwytu. Uchwyt wątku CWinThread
jest zawsze zamykany, gdy obiekt zostanie zniszczony.
CWinThread::m_hThread
Dojście do wątku dołączonego do tego CWinThread
elementu .
HANDLE m_hThread;
Uwagi
Element m_hThread
członkowski danych jest publiczną zmienną typu HANDLE
. Jest to prawidłowe tylko wtedy, gdy obiekt podstawowego wątku jądra obecnie istnieje, a dojście nie zostało jeszcze zamknięte.
Destruktor CWinThread
wywołuje metodę CloseHandle
.m_hThread
TRUE
Jeśli m_bAutoDelete
wątek kończy działanie, CWinThread
obiekt zostanie zniszczony, co spowoduje unieważnienie wszystkich wskaźników do CWinThread
obiektu i jego zmiennych składowych. Może być konieczne sprawdzenie m_hThread
wartości zakończenia wątku lub oczekiwanie na sygnał. Aby zachować CWinThread
obiekt i jego m_hThread
element członkowski podczas wykonywania wątku i po jego zakończeniu, ustaw wartość m_bAutoDelete
na FALSE
przed zezwoleniem na kontynuowanie wykonywania wątku. W przeciwnym razie wątek może zakończyć się, zniszczyć CWinThread
obiekt i zamknąć uchwyt, zanim spróbujesz go użyć. Jeśli używasz tej techniki, ponosisz odpowiedzialność za usunięcie CWinThread
obiektu.
CWinThread::m_nThreadID
Identyfikator wątku dołączonego do tego CWinThread
elementu .
DWORD m_nThreadID;
Uwagi
Element m_nThreadID
członkowski danych jest publiczną zmienną typu DWORD
. Jest to prawidłowe tylko wtedy, gdy obiekt podstawowego wątku jądra obecnie istnieje.
Zobacz również uwagi na temat m_hThread
życia.
Przykład
Zobacz przykład dla elementu AfxGetThread
.
CWinThread::m_pActiveWnd
Ten element członkowski danych służy do przechowywania wskaźnika do aktywnego obiektu okna wątku.
CWnd* m_pActiveWnd;
Uwagi
Biblioteka klas programu Microsoft Foundation automatycznie zakończy wątek po zamknięciu okna, do których m_pActiveWnd
się odwołuje. Jeśli ten wątek jest wątkiem podstawowym dla aplikacji, aplikacja zostanie również zakończona. Jeśli ten element członkowski danych to NULL
, aktywne okno dla obiektu aplikacji CWinApp
zostanie odziedziczone. m_pActiveWnd
jest publiczną zmienną typu CWnd*
.
Zazwyczaj ta zmienna składowa jest ustawiana podczas zastępowania InitInstance
elementu . W wątku roboczym wartość tego elementu członkowskiego danych jest dziedziczona z wątku nadrzędnego.
CWinThread::m_pMainWnd
Ten element członkowski danych służy do przechowywania wskaźnika do głównego obiektu okna wątku.
CWnd* m_pMainWnd;
Uwagi
Biblioteka klas programu Microsoft Foundation automatycznie zakończy wątek po zamknięciu okna, do których m_pMainWnd
się odwołuje. Jeśli ten wątek jest wątkiem podstawowym dla aplikacji, aplikacja zostanie również zakończona. Jeśli ten element członkowski danych to NULL
, główne okno obiektu aplikacji CWinApp
będzie używane do określenia, kiedy zakończyć wątek. m_pMainWnd
jest publiczną zmienną typu CWnd*
.
Zazwyczaj ta zmienna składowa jest ustawiana podczas zastępowania InitInstance
elementu . W wątku roboczym wartość tego elementu członkowskiego danych jest dziedziczona z wątku nadrzędnego.
CWinThread::OnIdle
Zastąpij tę funkcję składową, aby wykonywać przetwarzanie w czasie bezczynności.
virtual BOOL OnIdle(LONG lCount);
Parametry
lCount
Licznik zwiększa się za każdym razem OnIdle
, gdy kolejka komunikatów wątku jest pusta. Ta liczba jest resetowany do 0 za każdym razem, gdy jest przetwarzany nowy komunikat. Możesz użyć parametru lCount
, aby określić względny czas bezczynności wątku bez przetwarzania komunikatu.
Wartość zwracana
Bezzerowe odbieranie większego czasu przetwarzania bezczynności; 0, jeśli nie jest potrzebny czas przetwarzania bezczynności.
Uwagi
OnIdle
jest wywoływana w domyślnej pętli komunikatów, gdy kolejka komunikatów wątku jest pusta. Użyj przesłonięcia, aby wywołać własne zadania obsługi bezczynności w tle.
OnIdle
Powinna zwrócić wartość 0, aby wskazać, że nie jest wymagany dodatkowy czas przetwarzania bezczynności. Parametr lCount
jest zwiększany za każdym razem OnIdle
, gdy kolejka komunikatów jest pusta i jest resetowana do 0 przy każdym przetwarzaniu nowego komunikatu. Możesz wywołać różne procedury bezczynności na podstawie tej liczby.
Domyślna implementacja tej funkcji składowej zwalnia obiekty tymczasowe i nieużywane biblioteki linków dynamicznych z pamięci.
Ta funkcja składowa jest używana tylko w wątkach interfejsu użytkownika.
Ponieważ aplikacja nie może przetwarzać komunikatów do momentu OnIdle
powrotu, nie wykonuj długich zadań w tej funkcji.
CWinThread::operator HANDLE
Pobiera uchwyt CWinThread
obiektu.
operator HANDLE() const;
Wartość zwracana
W przypadku powodzenia uchwyt obiektu wątku; w przeciwnym razie, NULL
.
Uwagi
Użyj uchwytu, aby bezpośrednio wywoływać interfejsy API systemu Windows.
CWinThread::PostThreadMessage
Wywoływana w celu opublikowania komunikatu zdefiniowanego przez użytkownika do innego CWinThread
obiektu.
BOOL PostThreadMessage(
UINT message,
WPARAM wParam,
LPARAM lParam);
Parametry
message
Identyfikator komunikatu zdefiniowanego przez użytkownika.
wParam
Pierwszy parametr komunikatu.
lParam
Drugi parametr komunikatu.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.
Uwagi
Wysłana wiadomość jest mapowana na właściwą procedurę obsługi komunikatów przez makro ON_THREAD_MESSAGE
mapy komunikatów.
Uwaga
Po wywołaniu PostThreadMessage
wywołania komunikat zostanie umieszczony w kolejce komunikatów wątku. Jednak ze względu na to, że komunikaty opublikowane w ten sposób nie są skojarzone z oknem, MFC nie będzie wysyłać ich do programów obsługi komunikatów ani poleceń. Aby obsłużyć te komunikaty, zastąp PreTranslateMessage()
funkcję klasy -pochodnej CWinApp
i ręcznie obsłuż komunikaty.
CWinThread::PreTranslateMessage
Zastąpij tę funkcję, aby filtrować komunikaty okien przed ich wysłaniem do funkcji TranslateMessage
systemu Windows i DispatchMessage
.
virtual BOOL PreTranslateMessage(MSG* pMsg);
Parametry
pMsg
Wskazuje strukturę zawierającą MSG
komunikat do przetworzenia.
Wartość zwracana
Nonzero, jeśli komunikat został w pełni przetworzony i PreTranslateMessage
nie powinien być przetwarzany dalej. Zero, jeśli komunikat powinien być przetwarzany w normalny sposób.
Uwagi
Ta funkcja składowa jest używana tylko w wątkach interfejsu użytkownika.
CWinThread::ProcessMessageFilter
Funkcja hook platformy wywołuje tę funkcję składową, aby filtrować i reagować na niektóre komunikaty systemu Windows.
virtual BOOL ProcessMessageFilter(
int code,
LPMSG lpMsg);
Parametry
code
Określa kod zaczepienia. Ta funkcja składowa używa kodu do określenia sposobu przetwarzania lpMsg
.
lpMsg
Wskaźnik do struktury systemu WindowsMSG
.
Wartość zwracana
Niezero, jeśli komunikat jest przetwarzany; w przeciwnym razie 0.
Uwagi
Funkcja zaczepienia przetwarza zdarzenia przed wysłaniem ich do normalnego przetwarzania komunikatów aplikacji.
Jeśli zastąpisz tę zaawansowaną funkcję, pamiętaj, aby wywołać wersję klasy bazowej w celu zachowania przetwarzania zaczepienia platformy.
CWinThread::ProcessWndProcException
Struktura wywołuje tę funkcję składową za każdym razem, gdy program obsługi nie przechwyci wyjątku zgłoszony w jednym z programów obsługi komunikatów ani poleceń wątku.
virtual LRESULT ProcessWndProcException(
CException* e,
const MSG* pMsg);
Parametry
e
Wskazuje na nieobsługiwany wyjątek.
pMsg
Wskazuje strukturę zawierającą MSG
informacje o komunikacie systemu Windows, który spowodował zgłoszenie wyjątku przez strukturę .
Wartość zwracana
-1, jeśli WM_CREATE
jest generowany wyjątek; w przeciwnym razie 0.
Uwagi
Nie należy bezpośrednio wywoływać tej funkcji składowej.
Domyślna implementacja tej funkcji składowej obsługuje tylko wyjątki wygenerowane na podstawie następujących komunikatów:
Polecenie | Akcja |
---|---|
WM_CREATE |
Zawieść. |
WM_PAINT |
Zweryfikuj okno, którego dotyczy problem, uniemożliwiając wygenerowanie innego WM_PAINT komunikatu. |
Zastąpi tę funkcję składową, aby zapewnić globalną obsługę wyjątków. Wywołaj funkcję podstawową tylko wtedy, gdy chcesz wyświetlić domyślne zachowanie.
Ta funkcja składowa jest używana tylko w wątkach, które mają pompę komunikatów.
CWinThread::PumpMessage
Zawiera pętlę komunikatu wątku.
virtual BOOL PumpMessage();
Uwagi
PumpMessage
zawiera pętlę komunikatu wątku. PumpMessage
element jest wywoływany przez CWinThread
element w celu pompowania komunikatów wątku. Możesz wywołać PumpMessage
metodę bezpośrednio, aby wymusić przetwarzanie komunikatów lub zastąpić PumpMessage
zmianę jego domyślnego zachowania.
Bezpośrednie wywoływanie PumpMessage
i zastępowanie jego domyślnego zachowania jest zalecane tylko dla użytkowników zaawansowanych.
CWinThread::ResumeThread
Wywoływana w celu wznowienia wykonywania wątku zawieszonego przez SuspendThread
funkcję składową lub wątku utworzonego z flagą CREATE_SUSPENDED
.
DWORD ResumeThread();
Wartość zwracana
Poprzednia liczba wstrzymania wątku w przypadku powodzenia; 0xFFFFFFFF
inaczej. Jeśli zwracana wartość to zero, bieżący wątek nie został zawieszony. Jeśli zwracana wartość to jedna, wątek został zawieszony, ale jest teraz ponownie uruchamiany. Każda wartość zwracana większa niż jedna oznacza, że wątek pozostaje zawieszony.
Uwagi
Liczba wstrzymania bieżącego wątku jest zmniejszana o jeden. Jeśli liczba wstrzymania zostanie zmniejszona do zera, wątek wznowi wykonywanie; w przeciwnym razie wątek pozostaje zawieszony.
CWinThread::Run
Udostępnia domyślną pętlę komunikatów dla wątków interfejsu użytkownika.
virtual int Run();
Wartość zwracana
int
Wartość zwracana przez wątek. Tę wartość można pobrać przez wywołanie metody GetExitCodeThread
.
Uwagi
Run
pobiera i wysyła komunikaty systemu Windows do momentu odebrania komunikatu przez aplikację WM_QUIT
. Jeśli kolejka komunikatów wątku nie zawiera obecnie żadnych komunikatów, Run
wywołania OnIdle
do wykonywania przetwarzania w czasie bezczynności. Komunikaty przychodzące przechodzą do funkcji składowej PreTranslateMessage
w celu specjalnego przetwarzania, a następnie do funkcji TranslateMessage
systemu Windows na potrzeby standardowego tłumaczenia klawiatury. Na koniec wywoływana DispatchMessage
jest funkcja systemu Windows.
Run
rzadko jest zastępowana, ale można ją zastąpić, aby zaimplementować specjalne zachowanie.
Ta funkcja składowa jest używana tylko w wątkach interfejsu użytkownika.
CWinThread::SetThreadPriority
Ta funkcja ustawia poziom priorytetu bieżącego wątku w klasie priorytetu.
BOOL SetThreadPriority(int nPriority);
Parametry
nPriority
Określa nowy poziom priorytetu wątku w swojej klasie priorytetu. Ten parametr musi być jedną z następujących wartości wymienionych z najwyższego priorytetu do najniższego:
THREAD_PRIORITY_TIME_CRITICAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_IDLE
Aby uzyskać więcej informacji na temat tych priorytetów, zobacz SetThreadPriority
w zestawie Windows SDK.
Wartość zwracana
Nonzero, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Można go wywołać tylko po CreateThread
pomyślnym powrocie.
CWinThread::SuspendThread
Zwiększa liczbę wstrzymania bieżącego wątku.
DWORD SuspendThread();
Wartość zwracana
Poprzednia liczba wstrzymania wątku w przypadku powodzenia; 0xFFFFFFFF
inaczej.
Uwagi
Jeśli jakikolwiek wątek ma wstrzymywanie liczby powyżej zera, ten wątek nie jest wykonywany. Wątek można wznowić, wywołując funkcję składową ResumeThread
.
Zobacz też
CCmdTarget
Klasa
Wykres hierarchii
CWinApp
Klasa
CCmdTarget
Klasa