Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 CWinThreadelementu .
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ć AfxBeginThreadmetodę , można skonstruować obiekt pochodny, a następnie wywołać metodę CWinThreadCreateThread. 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 CWinThreadprogramu , 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_SUSPENDEDRozpocznij wątek z liczbą wstrzymania jednego. UżyjCREATE_SUSPENDEDpolecenia , jeśli chcesz zainicjować dowolne daneCWinThreadskładowe obiektu, takie jakm_bAutoDeletelub jakiekolwiek elementy członkowskie klasy pochodnej, przed uruchomieniem wątku. Po zakończeniu inicjowania użyj polecenia ,CWinThread::ResumeThreadaby uruchomić wątek. Wątek nie zostanie wykonany, dopókiCWinThread::ResumeThreadnie 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 AfxBeginThreadmetody , 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_CRITICALTHREAD_PRIORITY_HIGHESTTHREAD_PRIORITY_ABOVE_NORMALTHREAD_PRIORITY_NORMALTHREAD_PRIORITY_BELOW_NORMALTHREAD_PRIORITY_LOWESTTHREAD_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 CWinThreadelementu .
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 CWinThreadelementu .
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 InitInstanceelementu . 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 InitInstanceelementu . 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_MESSAGEmapy komunikatów.
Uwaga
Po wywołaniu PostThreadMessagewywoł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 CWinAppi 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_CRITICALTHREAD_PRIORITY_HIGHESTTHREAD_PRIORITY_ABOVE_NORMALTHREAD_PRIORITY_NORMALTHREAD_PRIORITY_BELOW_NORMALTHREAD_PRIORITY_LOWESTTHREAD_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