Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 CWinThreadCRuntimeClass 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 CWinThreadObjekt 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 CWinThreadfinden 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_SUSPENDEDStarten Sie den Thread mit einer Anhalteanzahl von 1. Verwenden Sie diese EigenschaftCREATE_SUSPENDED, wenn Sie Memberdaten desCWinThreadObjekts initialisieren möchten, zm_bAutoDelete. B. elemente der abgeleiteten Klasse, bevor der Thread gestartet wird. Nachdem die Initialisierung abgeschlossen ist, verwenden Sie denCWinThread::ResumeThreadThread, um den Thread zu starten. Der Thread wird erst ausgeführt, wennCWinThread::ResumeThreadaufgerufen 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 AfxBeginThreadund 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 GetExitCodeThreadabgerufen 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_CRITICALTHREAD_PRIORITY_HIGHESTTHREAD_PRIORITY_ABOVE_NORMALTHREAD_PRIORITY_NORMALTHREAD_PRIORITY_BELOW_NORMALTHREAD_PRIORITY_LOWESTTHREAD_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 CWinAppabgeleitete 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 CWinThreadangefü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_hThreadCloseHandle. 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 CWinThreadThread 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_MESSAGEzugeordnet.
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 CWinAppabgeleiteten 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 GetExitCodeThreadabgerufen 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_CRITICALTHREAD_PRIORITY_HIGHESTTHREAD_PRIORITY_ABOVE_NORMALTHREAD_PRIORITY_NORMALTHREAD_PRIORITY_BELOW_NORMALTHREAD_PRIORITY_LOWESTTHREAD_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