Home » Tutorials » Object Pascal/RTL » Threads

Threads

Steuerung

In vielen Fällen ist es nötig, dass sich ein Thread selbst steuert. Dazu bestehen folgende Möglichkeiten (API-Funktionen):

MsgWaitForMultipleObjects

Diese Funktion bewirkt, dass der Thread sich selbst suspendiert, bis bestimmte Ereignisse auftreten oder die TimeOut-Zeit überschritten wird.

function MsgWaitForMultipleObjects(
    nCount: DWORD;
    var pHandles;
    fWaitAll: BOOL;
    dwMilliseconds,
    dwWakeMask: DWORD): DWORD;
    stdcall;

nCount: gibt die Anzahl der Objekthandles in dem Array an, auf die pHandles zeigt.

pHandles: Zeigt auf ein Array mit Objekthandles.

fWaitAll: Legt den Wartetyp fest. Bei true kehrt die Funktion zurück, sobald alle Objekte im pHandles-Array, Input-Ereignisse eingeschlossen, auf signalisiert gesetzt worden sind. Bei false kehrt die Funktion zurück, wenn bereits eines der Objekte auf signalisiert gesetzt wurde. Im letzten Fall verweist der Rückgabewert der Funktion auf das Objekt, dessen Zustand die Rückkehr der Funktion ausgelöst hat.

dwMilliseconds: Legt das Time-Out-Intervall in Millisekunden fest. Die Funktion kehrt zurück, sobald die Zeit abgelaufen ist, auch wenn die Kriterien, die durch fWaitAll oder dwWakeMask festgelegt wurden, nicht erfüllt sind. Ist dwMilliseconds 0, prüft die Funktion die Zustände der angegebenen Objekte und kehrt sofort zurück. Wenn dwMilliseconds INFINITE ist, läuft das Time-Out-Intervall niemals ab.

dwWakeMask: Legt Input-Typen fest, die miteinander kombiniert werden können (siehe Win32-SDK-Hilfe).

Sleep

Mit Sleep suspendiert sich ein Thread für die Dauer der angegebenen Millisekunden selbst.

function Sleep(cMilliseconds: DWORD); stdcall;

WaitForInputIdle

Beim Starten eines neuen Prozesses (Anwendung) vergeht einige Zeit, bis der Prozess vollständig initialisiert ist und auf Botschaften reagieren kann. Die Funktion WaitForInputIdle sorgt dafür, dass ein Thread, der einen neuen Prozess startet, so lange wartet, bis der neue Prozess „empfangsbereit“ ist.

function WaitForInputIdle(
    hProcess: THandle;
    dwMilliseconds: DWORD): DWORD; stdcall;

hProcess: Identifiziert den Prozess, auf dessen Empfangsbereitschaft gewartet werden soll.

dwMilliseconds: Legt einen Time-Out in Millisekunden fest. Wenn dwMilliseconds INFINITE ist, wartet die Funktion so lange, bis der Prozess empfangsbereit ist.

WaitForMultipleObjects

Mit dieser Funktion kann auf das Ende mehrerer beliebiger Objekte gewartet werden.

function WaitForMultipleObjects(
    nCount: DWORD;
    var lpHandles;
    bWaitAll: BOOL;
    dwMilliseconds: DWORD): DWORD; stdcall;

nCount: Legt die Anzahl der Objekt-Handles im Array lpHandles fest.

lpHandles: Zeigt auf ein Array von Objekt-Handles.

fWaitAll: Legt den Wartetyp fest. Bei true kehrt die Funktion zurück, sobald alle Objekte im pHandles-Array, Input-Ereignisse eingeschlossen, auf signalisiert gesetzt worden sind. Bei false kehrt die Funktion zurück, wenn bereits eines der Objekte auf signalisiert gesetzt wurde. Im letzten Fall verweist der Rückgabewert der Funktion auf das Objekt, dessen Zustand die Rückkehr der Funktion ausgelöst hat.

dwMilliseconds: Legt das Time-Out-Intervall in Millisekunden fest. Die Funktion kehrt zurück, sobald die Zeit abgelaufen ist, auch wenn die Kriterien, die durch fWaitAllfestgelegt wurden, nicht erfüllt sind. Ist dwMilliseconds 0, prüft die Funktion die Zustände der angegebenen Objekte und kehrt sofort zurück. Wenn dwMilliseconds INFINITE ist, läuft das Time-Out-Intervall niemals ab.

WaitForSingleObject

function WaitForSingleObject(
    lHandle: THandle;
    dwMilliseconds: DWORD): DWORD; stdcall;

lHandle: Identifiziert das Objekt.

dwMilliseconds: Legt das Time-Out-Intervall in Millisekunden fest. Die Funktion kehrt zurück, sobald die Zeit abgelaufen ist, auch wenn die Kriterien, die durch fWaitAllfestgelegt wurden, nicht erfüllt sind. Ist dwMilliseconds 0, prüft die Funktion die Zustände der angegebenen Objekte und kehrt sofort zurück. Wenn dwMilliseconds INFINITE ist, läuft das Time-Out-Intervall niemals ab.