Freigeben über


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 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

CObject

CCmdTarget

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 Eigenschaft CREATE_SUSPENDED , wenn Sie Memberdaten des CWinThread Objekts initialisieren möchten, z m_bAutoDelete . B. elemente der abgeleiteten Klasse, bevor der Thread gestartet wird. Nachdem die Initialisierung abgeschlossen ist, verwenden Sie den CWinThread::ResumeThread Thread, um den Thread zu starten. Der Thread wird erst ausgeführt, wenn CWinThread::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 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_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 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_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