CWinThread
-Klasse
Stellt einen Ausführungsthread innerhalb einer Anwendung dar.
Syntax
class CWinThread : public CCmdTarget
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
CWinThread::CWinThread |
Erstellt ein CWinThread -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
CWinThread::CreateThread |
Startet die Ausführung eines CWinThread Objekts. |
CWinThread::ExitInstance |
Überschreiben, um zu bereinigen, wenn der Thread beendet wird. |
CWinThread::GetMainWnd |
Ruft einen Zeiger auf das Hauptfenster für den Thread ab. |
CWinThread::GetThreadPriority |
Ruft die Priorität des aktuellen Threads ab. |
CWinThread::InitInstance |
Überschreiben, um die Initialisierung der Threadinstanz durchzuführen. |
CWinThread::IsIdleMessage |
Sucht nach speziellen Nachrichten. |
CWinThread::OnIdle |
Überschreiben, um threadspezifische Leerlaufzeitverarbeitung durchzuführen. |
CWinThread::PostThreadMessage |
Sendet eine Nachricht an ein anderes CWinThread Objekt. |
CWinThread::PreTranslateMessage |
Filtert Nachrichten, bevor sie an die Windows-Funktionen und DispatchMessage -Funktionen TranslateMessage verteilt werden. |
CWinThread::ProcessMessageFilter |
Fängt bestimmte Nachrichten ab, bevor sie die Anwendung erreichen. |
CWinThread::ProcessWndProcException |
Fängt alle unbehandelten Ausnahmen ab, die von den Nachrichten- und Befehlshandlern des Threads ausgelöst werden. |
CWinThread::PumpMessage |
Enthält die Nachrichtenschleife des Threads. |
CWinThread::ResumeThread |
Erhöht die Anzahl der Anhaltevorgänge eines Threads. |
CWinThread::Run |
Steuerungsfunktion für Threads mit einer Nachrichtenpumpe. Überschreiben, um die Standardnachrichtenschleife anzupassen. |
CWinThread::SetThreadPriority |
Legt die Priorität des aktuellen Threads fest. |
CWinThread::SuspendThread |
Erhöht die Anzahl der Anhaltevorgänge eines Threads. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
CWinThread::operator HANDLE |
Ruft das Handle des CWinThread Objekts ab. |
Öffentliche Datenmember
Name | Beschreibung |
---|---|
CWinThread::m_bAutoDelete |
Gibt an, ob das Objekt beim Beenden des Threads zerstört werden soll. |
CWinThread::m_hThread |
Behandeln sie den aktuellen Thread. |
CWinThread::m_nThreadID |
ID des aktuellen Threads. |
CWinThread::m_pActiveWnd |
Zeigen Sie auf das Hauptfenster der Containeranwendung, wenn ein OLE-Server aktiv ist. |
CWinThread::m_pMainWnd |
Enthält einen Zeiger auf das Hauptfenster der Anwendung. |
Hinweise
Der Hauptthread der Ausführung wird in der Regel von einem Objekt bereitgestellt, das von CWinApp
; CWinApp
abgeleitet wird CWinThread
. Zusätzliche CWinThread
Objekte ermöglichen mehrere Threads innerhalb einer bestimmten Anwendung.
Es gibt zwei allgemeine Typen von Threads, die CWinThread
unterstützt werden: Arbeitsthreads und Benutzeroberflächenthreads. Arbeitsthreads haben keine Meldungspumpe: Beispielsweise ein Thread, der Hintergrundberechnungen in einer Tabellenkalkulationsanwendung durchführt. Benutzeroberflächenthreads verfügen über eine Nachrichtenpumpe und verarbeiten Nachrichten, die vom System empfangen werden. CWinApp
und von ihr abgeleitete Klassen sind Beispiele für Benutzeroberflächenthreads. Andere Benutzeroberflächenthreads können auch direkt von CWinThread
.
Objekte der Klasse CWinThread
sind in der Regel für die Dauer des Threads vorhanden. Wenn Sie dieses Verhalten ändern möchten, legen Sie diese m_bAutoDelete
Einstellung auf FALSE
.
Die CWinThread
Klasse ist erforderlich, um Ihren Code und MFC vollständig threadsicher zu machen. Threadlokale Daten, die vom Framework zum Verwalten threadspezifischer Informationen verwendet werden, werden von CWinThread
Objekten verwaltet. Aufgrund dieser Abhängigkeit von CWinThread
threadlokalen Daten muss jeder Thread, der MFC verwendet, von MFC erstellt werden. Beispielsweise kann ein von der Laufzeitfunktion _beginthread
_beginthreadex
erstelltes Thread keine MFC-APIs verwenden.
Rufen Sie zum Erstellen eines Threads auf AfxBeginThread
. Es gibt zwei Formulare, je nachdem, ob Sie einen Arbeits- oder Benutzeroberflächenthread benötigen. Wenn Sie einen Benutzeroberflächenthread verwenden möchten, übergeben Sie an AfxBeginThread
einen Zeiger auf die CWinThread
CRuntimeClass
abgeleitete Klasse. Wenn Sie einen Arbeitsthread erstellen möchten, übergeben Sie einen Zeiger an AfxBeginThread
die Steuerungsfunktion und den Parameter an die Steuerungsfunktion. Für Arbeitsthreads und Benutzeroberflächenthreads können Sie optionale Parameter angeben, die Priorität, Stapelgröße, Erstellungskennzeichnungen und Sicherheitsattribute ändern. AfxBeginThread
gibt einen Zeiger auf das neue CWinThread
Objekt zurück.
Statt aufzurufen AfxBeginThread
, können Sie ein abgeleitetes CWinThread
Objekt erstellen und dann aufrufen CreateThread
. Diese zweistufige Konstruktionsmethode ist nützlich, wenn Sie das CWinThread
Objekt zwischen aufeinander folgender Erstellung und Beendigung von Threadausführungen wiederverwenden möchten.
Weitere Informationen CWinThread
finden Sie in den Artikeln Multithreading mit C++ und MFC, Multithreading: Erstellen von Benutzeroberflächenthreads, Multithreading: Erstellen von Arbeitsthreads und Multithreading: Verwenden der Synchronisierungsklassen.
Vererbungshierarchie
CWinThread
Anforderungen
Header: afxwin.h
CWinThread::CreateThread
Erstellt einen Thread, der innerhalb des Adressraums des aufrufenden Prozesses ausgeführt werden soll.
BOOL CreateThread(
DWORD dwCreateFlags = 0,
UINT nStackSize = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);
Parameter
dwCreateFlags
Gibt ein zusätzliches Flag an, das die Erstellung des Threads steuert. Dieses Flag kann einen von zwei Werten enthalten:
CREATE_SUSPENDED
Starten Sie den Thread mit einer Anhalteanzahl von 1. Verwenden Sie diese EigenschaftCREATE_SUSPENDED
, wenn Sie Memberdaten desCWinThread
Objekts initialisieren möchten, zm_bAutoDelete
. B. elemente der abgeleiteten Klasse, bevor der Thread gestartet wird. Nachdem die Initialisierung abgeschlossen ist, verwenden Sie denCWinThread::ResumeThread
Thread, um den Thread zu starten. Der Thread wird erst ausgeführt, wennCWinThread::ResumeThread
aufgerufen wurde.0 Starten Sie den Thread unmittelbar nach der Erstellung.
nStackSize
Gibt die Stapelgröße für den neuen Thread in Bytes an. Bei 0 wird die Stapelgröße standardmäßig auf dieselbe Größe wie der primäre Thread des Prozesses festgelegt.
lpSecurityAttrs
Verweist auf eine SECURITY_ATTRIBUTES
Struktur, die die Sicherheitsattribute für den Thread angibt.
Rückgabewert
Nonzero, wenn der Thread erfolgreich erstellt wird; andernfalls 0.
Hinweise
Wird AfxBeginThread
verwendet, um ein Threadobjekt zu erstellen und in einem Schritt auszuführen. Verwenden Sie diese Einstellung CreateThread
, wenn Sie das Threadobjekt zwischen der aufeinanderfolgenden Erstellung und beendigung von Threadausführungen wiederverwenden möchten.
CWinThread::CWinThread
Erstellt ein CWinThread
-Objekt.
CWinThread();
Hinweise
Rufen Sie die Memberfunktion auf CreateThread
, um mit der Ausführung des Threads zu beginnen. Sie erstellen in der Regel Threads, indem Sie diesen Konstruktor aufrufen AfxBeginThread
und CreateThread
.
CWinThread::ExitInstance
Vom Framework innerhalb einer selten überschriebenen Run
Memberfunktion aufgerufen, um diese Instanz des Threads zu beenden oder wenn ein Aufruf InitInstance
fehlschlägt.
virtual int ExitInstance();
Rückgabewert
Der Beendigungscode des Threads; 0 gibt keine Fehler an, und Werte, die größer als 0 sind, deuten auf einen Fehler hin. Dieser Wert kann durch Aufrufen GetExitCodeThread
abgerufen werden.
Hinweise
Rufen Sie diese Memberfunktion nicht von überall aus, sondern innerhalb der Run
Memberfunktion auf. Diese Memberfunktion wird nur in Benutzeroberflächenthreads verwendet.
Die Standardimplementierung dieser Funktion löscht das CWinThread
Objekt, wenn m_bAutoDelete
dies der Fall ist TRUE
. Überschreiben Sie diese Funktion, wenn Sie beim Beenden des Threads zusätzliche Bereinigungen durchführen möchten. Ihre Implementierung ExitInstance
sollte die Version der Basisklasse aufrufen, nachdem Der Code ausgeführt wurde.
CWinThread::GetMainWnd
Wenn Ihre Anwendung ein OLE-Server ist, rufen Sie diese Funktion auf, um einen Zeiger auf das aktive Hauptfenster der Anwendung abzurufen, anstatt direkt auf das m_pMainWnd
Element des Anwendungsobjekts zu verweisen.
virtual CWnd* GetMainWnd();
Rückgabewert
Diese Funktion gibt einen Zeiger auf einen von zwei Fenstertypen zurück. Wenn Ihr Thread Teil eines OLE-Servers ist und über ein Objekt verfügt, das in einem aktiven Container aktiv ist, gibt diese Funktion das CWinApp::m_pActiveWnd
Datenelement des CWinThread
Objekts zurück.
Wenn kein Objekt vorhanden ist, das in einem Container aktiv ist oder ihre Anwendung kein OLE-Server ist, gibt diese Funktion das m_pMainWnd
Datenelement des Threadobjekts zurück.
Hinweise
Bei Benutzeroberflächenthreads entspricht dies dem direkten Verweis auf das m_pActiveWnd
Element Ihres Anwendungsobjekts.
Wenn es sich bei der Anwendung nicht um einen OLE-Server handelt, entspricht das Aufrufen dieser Funktion dem direkten Verweisen auf den m_pMainWnd
-Member des Anwendungsobjekts.
Überschreiben Sie diese Funktion, um das Standardverhalten zu ändern.
CWinThread::GetThreadPriority
Ruft die aktuelle Threadprioritätsebene dieses Threads ab.
int GetThreadPriority();
Rückgabewert
Die aktuelle Threadprioritätsebene innerhalb der Prioritätsklasse. Der zurückgegebene Wert ist eine der folgenden Werte, die von der höchsten Priorität bis zum niedrigsten aufgeführt werden:
THREAD_PRIORITY_TIME_CRITICAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_IDLE
Weitere Informationen zu diesen Prioritäten finden Sie im SetThreadPriority
Windows SDK.
CWinThread::InitInstance
InitInstance
muss überschrieben werden, um jede neue Instanz eines Benutzeroberflächenthreads zu initialisieren.
virtual BOOL InitInstance();
Rückgabewert
Nonzero, wenn die Initialisierung erfolgreich ist; andernfalls 0.
Hinweise
In der Regel überschreiben InitInstance
Sie die Ausführung von Aufgaben, die abgeschlossen werden müssen, wenn ein Thread zum ersten Mal erstellt wird.
Diese Memberfunktion wird nur in Benutzeroberflächenthreads verwendet. Führen Sie die Initialisierung von Arbeitsthreads in der steuerungsfunktion durch, die an AfxBeginThread
.
CWinThread::IsIdleMessage
Überschreiben Sie diese Funktion, um nach dem Generieren bestimmter Nachrichten nicht OnIdle
mehr aufgerufen zu werden.
virtual BOOL IsIdleMessage(MSG* pMsg);
Parameter
pMsg
Verweist auf die aktuelle Nachricht, die verarbeitet wird.
Rückgabewert
Nonzero, wenn OnIdle
nach der Verarbeitung der Nachricht aufgerufen werden soll; andernfalls 0.
Hinweise
Die Standardimplementierung ruft OnIdle
nicht nach redundanten Mausnachrichten und Nachrichten auf, die durch blinkende Carets generiert werden.
Wenn eine Anwendung einen kurzen Timer erstellt hat, OnIdle
wird häufig aufgerufen, was zu Leistungsproblemen führt. Um die Leistung einer solchen Anwendung zu verbessern, setzen IsIdleMessage
Sie die von der Anwendung CWinApp
abgeleitete Klasse außer Kraft, um wie folgt nach WM_TIMER
Nachrichten zu suchen:
BOOL CMyWinApp::IsIdleMessage(MSG* pMsg)
{
if (!CWinApp::IsIdleMessage(pMsg) || pMsg->message == WM_TIMER)
return FALSE;
else
return TRUE;
}
Die Handhabung WM_TIMER
in dieser Weise verbessert die Leistung von Anwendungen, die kurze Zeitgeber verwenden.
CWinThread::m_bAutoDelete
Gibt an, ob das CWinThread
-Objekt der Threadbeendigung automatisch gelöscht werden soll.
BOOL m_bAutoDelete;
Hinweise
Das m_bAutoDelete
Datenelement ist eine öffentliche Variable vom Typ BOOL.
Der Wert hat m_bAutoDelete
keinen Einfluss darauf, wie der zugrunde liegende Threadhandle geschlossen wird, wirkt sich jedoch auf den Zeitpunkt des Schließens des Handles aus. Das Threadhandle wird immer geschlossen, wenn das CWinThread
-Objekt zerstört wird.
CWinThread::m_hThread
Behandeln Sie den thread, der an diesen CWinThread
angefügt ist.
HANDLE m_hThread;
Hinweise
Das m_hThread
Datenelement ist eine öffentliche Variable vom Typ HANDLE
. Es ist nur gültig, wenn das zugrunde liegende Kernelthreadobjekt derzeit vorhanden ist und das Handle noch nicht geschlossen wurde.
Der CWinThread
Destruktor ruft anm_hThread
CloseHandle
. Wenn m_bAutoDelete
der Thread beendet wird TRUE
, wird das CWinThread
Objekt zerstört, wodurch alle Zeiger auf das CWinThread
Objekt und seine Membervariablen ungültig werden. Möglicherweise müssen Sie den m_hThread
Threadausgangswert überprüfen oder auf ein Signal warten. Wenn Sie das Objekt und dessen m_hThread
Member während der CWinThread
Threadausführung und nach dem Beenden beibehalten möchten, legen Sie ihn m_bAutoDelete
festFALSE
, bevor Sie die Threadausführung fortsetzen können. Andernfalls kann der Thread beendet, das CWinThread
Objekt zerstört und den Handle schließen, bevor Sie versuchen, es zu verwenden. Wenn Sie diese Technik verwenden, sind Sie für das Löschen des CWinThread
Objekts verantwortlich.
CWinThread::m_nThreadID
ID des an diesen CWinThread
Thread angefügten Threads.
DWORD m_nThreadID;
Hinweise
Das m_nThreadID
Datenelement ist eine öffentliche Variable vom Typ DWORD
. Es ist nur gültig, wenn das zugrunde liegende Kernelthreadobjekt zurzeit vorhanden ist.
Siehe auch Hinweise zur m_hThread
Lebensdauer.
Beispiel
Ein Beispiel hierfür finden Sie unter AfxGetThread
.
CWinThread::m_pActiveWnd
Verwenden Sie dieses Datenelement, um einen Zeiger auf das aktive Fensterobjekt des Threads zu speichern.
CWnd* m_pActiveWnd;
Hinweise
Die Microsoft Foundation-Klassenbibliothek beendet ihren Thread automatisch, wenn das fenster m_pActiveWnd
, auf das verwiesen wird, geschlossen wird. Wenn dieser Thread der primäre Thread für eine Anwendung ist, wird die Anwendung ebenfalls beendet. Wenn dieser Datenmember lautet NULL
, wird das aktive Fenster für das Objekt der Anwendung CWinApp
geerbt. m_pActiveWnd
ist eine öffentliche Variable vom Typ CWnd*
.
In der Regel legen Sie diese Membervariable fest, wenn Sie dies außer Kraft setzen InitInstance
. In einem Arbeitsthread wird der Wert dieses Datenmembers von seinem übergeordneten Thread geerbt.
CWinThread::m_pMainWnd
Verwenden Sie dieses Datenelement, um einen Zeiger auf das Hauptfensterobjekt des Threads zu speichern.
CWnd* m_pMainWnd;
Hinweise
Die Microsoft Foundation-Klassenbibliothek beendet ihren Thread automatisch, wenn das fenster m_pMainWnd
, auf das verwiesen wird, geschlossen wird. Wenn dieser Thread der primäre Thread für eine Anwendung ist, wird die Anwendung ebenfalls beendet. Wenn dieses Datenelement lautet NULL
, wird das Hauptfenster für das Objekt der Anwendung CWinApp
verwendet, um zu bestimmen, wann der Thread beendet werden soll. m_pMainWnd
ist eine öffentliche Variable vom Typ CWnd*
.
In der Regel legen Sie diese Membervariable fest, wenn Sie dies außer Kraft setzen InitInstance
. In einem Arbeitsthread wird der Wert dieses Datenmembers von seinem übergeordneten Thread geerbt.
CWinThread::OnIdle
Überschreiben Sie diese Memberfunktion, um die Leerlaufzeitverarbeitung durchzuführen.
virtual BOOL OnIdle(LONG lCount);
Parameter
lCount
Ein Indikator, der jedes Mal OnIdle
erhöht wird, wenn die Nachrichtenwarteschlange des Threads leer ist. Diese Anzahl wird jedes Mal auf 0 zurückgesetzt, wenn eine neue Nachricht verarbeitet wird. Sie können den lCount
Parameter verwenden, um die relative Zeitspanne zu bestimmen, die der Thread im Leerlauf war, ohne eine Nachricht zu verarbeiten.
Rückgabewert
Nonzero, um mehr Leerlaufverarbeitungszeit zu erhalten; 0, wenn keine leerlaufbereite Verarbeitungszeit erforderlich ist.
Hinweise
OnIdle
wird in der Standardnachrichtenschleife aufgerufen, wenn die Nachrichtenwarteschlange des Threads leer ist. Verwenden Sie die Außerkraftsetzung, um ihre eigenen Hintergrund-Idle-Handler-Aufgaben aufzurufen.
OnIdle
sollte "0" zurückgeben, um anzugeben, dass keine zusätzliche Leerlaufverarbeitungszeit erforderlich ist. Der lCount
Parameter wird jedes Mal OnIdle
erhöht, wenn die Nachrichtenwarteschlange leer ist und jedes Mal auf 0 zurückgesetzt wird, wenn eine neue Nachricht verarbeitet wird. Sie können ihre verschiedenen Leerlaufroutinen basierend auf dieser Anzahl aufrufen.
Die Standardimplementierung dieser Memberfunktion gibt temporäre Objekte und nicht verwendete Dynamic Link-Bibliotheken aus dem Arbeitsspeicher frei.
Diese Memberfunktion wird nur in Benutzeroberflächenthreads verwendet.
Da die Anwendung keine Nachrichten bis zum OnIdle
Zurückgeben verarbeiten kann, führen Sie in dieser Funktion keine langwierigen Aufgaben aus.
CWinThread::operator HANDLE
Ruft das Handle des CWinThread
Objekts ab.
operator HANDLE() const;
Rückgabewert
Bei erfolgreicher Ausführung des Handles des Threadobjekts; andernfalls . NULL
Hinweise
Verwenden Sie das Handle, um Windows-APIs direkt aufzurufen.
CWinThread::PostThreadMessage
Wird aufgerufen, um eine benutzerdefinierte Nachricht an ein anderes CWinThread
Objekt zu senden.
BOOL PostThreadMessage(
UINT message,
WPARAM wParam,
LPARAM lParam);
Parameter
message
ID der benutzerdefinierten Nachricht.
wParam
First message parameter.
lParam
Zweiter Nachrichtenparameter.
Rückgabewert
Ungleich Null, wenn erfolgreich, andernfalls 0 (Null).
Hinweise
Die gepostete Nachricht wird dem richtigen Nachrichtenhandler durch das Nachrichtenzuordnungsmakro ON_THREAD_MESSAGE
zugeordnet.
Hinweis
Wenn Sie anrufen PostThreadMessage
, wird die Nachricht in der Nachrichtenwarteschlange des Threads platziert. Da nachrichten, die auf diese Weise gepostet wurden, jedoch nicht einem Fenster zugeordnet sind, werden sie von MFC nicht an Nachrichten- oder Befehlshandler verteilt. Um diese Nachrichten zu verarbeiten, überschreiben Sie die PreTranslateMessage()
Funktion Ihrer CWinApp
abgeleiteten Klasse, und behandeln Sie die Nachrichten manuell.
CWinThread::PreTranslateMessage
Überschreiben Sie diese Funktion, um Fenstermeldungen zu filtern, bevor sie an die Windows-Funktionen und DispatchMessage
-Funktionen TranslateMessage
verteilt werden.
virtual BOOL PreTranslateMessage(MSG* pMsg);
Parameter
pMsg
Verweist auf eine MSG
Struktur , die die zu verarbeitende Nachricht enthält.
Rückgabewert
Nonzero, wenn die Nachricht vollständig verarbeitet PreTranslateMessage
wurde und nicht weiter verarbeitet werden sollte. Null, wenn die Nachricht normal verarbeitet werden soll.
Hinweise
Diese Memberfunktion wird nur in Benutzeroberflächenthreads verwendet.
CWinThread::ProcessMessageFilter
Die Hook-Funktion des Frameworks ruft diese Memberfunktion auf, um bestimmte Windows-Nachrichten zu filtern und darauf zu reagieren.
virtual BOOL ProcessMessageFilter(
int code,
LPMSG lpMsg);
Parameter
code
Gibt einen Hook-Code an. Diese Memberfunktion verwendet den Code, um zu bestimmen, wie verarbeitet wird lpMsg
.
lpMsg
Ein Zeiger auf eine Windows-StrukturMSG
.
Rückgabewert
Nonzero, wenn die Nachricht verarbeitet wird; andernfalls 0.
Hinweise
Eine Hook-Funktion verarbeitet Ereignisse, bevor sie an die normale Nachrichtenverarbeitung der Anwendung gesendet werden.
Wenn Sie dieses erweiterte Feature außer Kraft setzen, müssen Sie unbedingt die Basisklassenversion aufrufen, um die Hookverarbeitung des Frameworks aufrechtzuerhalten.
CWinThread::ProcessWndProcException
Das Framework ruft diese Memberfunktion auf, wenn der Handler keine Ausnahme abfangen kann, die in einem der Nachrichten- oder Befehlshandler ihres Threads ausgelöst wird.
virtual LRESULT ProcessWndProcException(
CException* e,
const MSG* pMsg);
Parameter
e
Verweist auf eine unbehandelte Ausnahme.
pMsg
Verweist auf eine MSG
Struktur , die Informationen zu der Windows-Nachricht enthält, die dazu führte, dass das Framework eine Ausnahme auslöste.
Rückgabewert
-1, wenn eine WM_CREATE
Ausnahme generiert wird; andernfalls 0.
Hinweise
Rufen Sie diese Memberfunktion nicht direkt auf.
Die Standardimplementierung dieser Memberfunktion behandelt nur Ausnahmen, die aus den folgenden Nachrichten generiert werden:
Get-Help | Aktion |
---|---|
WM_CREATE |
Fehler. |
WM_PAINT |
Überprüfen Sie das betroffene Fenster, wodurch verhindert wird, dass eine andere WM_PAINT Nachricht generiert wird. |
Überschreiben Sie diese Memberfunktion, um die globale Behandlung Ihrer Ausnahmen bereitzustellen. Rufen Sie die Basisfunktionalität nur auf, wenn Sie das Standardverhalten anzeigen möchten.
Diese Memberfunktion wird nur in Threads verwendet, die über eine Nachrichtenpumpe verfügen.
CWinThread::PumpMessage
Enthält die Nachrichtenschleife des Threads.
virtual BOOL PumpMessage();
Hinweise
PumpMessage
enthält die Nachrichtenschleife des Threads. PumpMessage
wird aufgerufen, um CWinThread
die Nachrichten des Threads zu pumpen. Sie können direkt aufrufen, um zu erzwingen, dass Nachrichten verarbeitet werden sollen, oder Sie können das Standardverhalten außer Kraft PumpMessage
setzen PumpMessage
.
Das direkte Aufrufen PumpMessage
und Überschreiben des Standardverhaltens wird nur für erweiterte Benutzer empfohlen.
CWinThread::ResumeThread
Wird aufgerufen, um die Ausführung eines Threads fortzusetzen, der von der SuspendThread
Memberfunktion angehalten wurde, oder einen Thread, der mit der CREATE_SUSPENDED
Kennzeichnung erstellt wurde.
DWORD ResumeThread();
Rückgabewert
Die vorherige Anzahl der Anhaltevorgänge des Threads bei erfolgreicher Ausführung; 0xFFFFFFFF
sonst. Wenn der Rückgabewert null ist, wurde der aktuelle Thread nicht angehalten. Wenn der Rückgabewert einer ist, wurde der Thread angehalten, aber jetzt neu gestartet. Jeder Rückgabewert größer als ein Wert bedeutet, dass der Thread angehalten bleibt.
Hinweise
Die Anzahl der Anhaltevorgänge des aktuellen Threads wird um eins reduziert. Wenn die Anzahl der Anhaltevorgänge auf Null reduziert wird, setzt der Thread die Ausführung fort. andernfalls bleibt der Thread angehalten.
CWinThread::Run
Stellt eine Standardmeldungsschleife für Benutzeroberflächenthreads bereit.
virtual int Run();
Rückgabewert
Ein int
Wert, der vom Thread zurückgegeben wird. Dieser Wert kann durch Aufrufen GetExitCodeThread
abgerufen werden.
Hinweise
Run
Erfasst und verteilt Windows-Nachrichten, bis die Anwendung eine WM_QUIT
Nachricht empfängt. Wenn die Nachrichtenwarteschlange des Threads derzeit keine Nachrichten enthält, Run
führen Aufrufe OnIdle
zur Ausführung der Leerlaufzeitverarbeitung durch. Eingehende Nachrichten wechseln zur PreTranslateMessage
Memberfunktion zur speziellen Verarbeitung und dann zur Windows-Funktion TranslateMessage
für die Standardmäßige Tastaturübersetzung. Schließlich wird die DispatchMessage
Windows-Funktion aufgerufen.
Run
wird selten außer Kraft gesetzt, sie können jedoch überschrieben werden, um ein spezielles Verhalten zu implementieren.
Diese Memberfunktion wird nur in Benutzeroberflächenthreads verwendet.
CWinThread::SetThreadPriority
Diese Funktion legt die Prioritätsebene des aktuellen Threads innerhalb der Prioritätsklasse fest.
BOOL SetThreadPriority(int nPriority);
Parameter
nPriority
Gibt die neue Threadprioritätsebene innerhalb der Prioritätsklasse an. Dieser Parameter muss eine der folgenden Werte sein, die von der höchsten Priorität bis zur niedrigsten Priorität aufgelistet werden:
THREAD_PRIORITY_TIME_CRITICAL
THREAD_PRIORITY_HIGHEST
THREAD_PRIORITY_ABOVE_NORMAL
THREAD_PRIORITY_NORMAL
THREAD_PRIORITY_BELOW_NORMAL
THREAD_PRIORITY_LOWEST
THREAD_PRIORITY_IDLE
Weitere Informationen zu diesen Prioritäten finden Sie im SetThreadPriority
Windows SDK.
Rückgabewert
Nonzero, wenn die Funktion erfolgreich war; andernfalls 0.
Hinweise
Sie kann nur nach CreateThread
erfolgreichen Rückgaben aufgerufen werden.
CWinThread::SuspendThread
Erhöht die Anzahl der Anhaltevorgänge des aktuellen Threads.
DWORD SuspendThread();
Rückgabewert
Die vorherige Anzahl der Anhaltevorgänge des Threads bei erfolgreicher Ausführung; 0xFFFFFFFF
sonst.
Hinweise
Wenn ein Thread eine Anhalteanzahl über Null aufweist, wird dieser Thread nicht ausgeführt. Der Thread kann durch Aufrufen der ResumeThread
Memberfunktion fortgesetzt werden.
Siehe auch
CCmdTarget
Klasse
Hierarchiediagramm
CWinApp
Klasse
CCmdTarget
Klasse