Wie kann bei großer Datenverarbeitungsmenge auf Benutzervorgänge während der Datenverarbeitung reagiert werden? Windows95/98 und WindowsNT sind Multithread-Multitasking-Betriebssysteme. Ihre Planungseinheit ist ein Thread, das heißt, ein Thread ist die Grundeinheit für die Zuweisung von Prozessorzeitressourcen. Daher können wir Threads verwenden, um große Stapel zu verarbeiten von Daten, während auf Benutzervorgänge reagiert wird.
Als hervorragende Entwicklungsplattform bietet DELPHI starke Unterstützung für die Entwicklung von Multithread-Anwendungen. Sie können die von der 32-Bit-Windows-Umgebung bereitgestellte Win32API-Schnittstellenfunktion CreateThread oder die in DELPHI bereitgestellte BeginThread-Funktion verwenden. Im folgenden Beispiel wird die von DELPHI bereitgestellte TThread-Klasse verwendet.
eins. Die grundlegende Methode ist wie folgt:
1. Leiten Sie eine neue Klasse von der Tthread-Klasse ab. (TSortThread-Klasse erstellen)
2. Definieren Sie die Create-Methode der neuen Klasse.
3. Definieren Sie die Execute-Methode der neuen Klasse und fügen Sie den Code ein, der ausgeführt wird, wenn der Thread ausgeführt wird, in die Execute-Methode.
4. Erstellen Sie Instanzen mithilfe von Referenzklassenmethoden.
zwei. Detaillierter Code und Beschreibung des Beispiels:
Erstellen Sie zunächst eine neue Einheit und speichern Sie sie als mysort.pas. In dieser Einheit haben wir eine TSortThread-Klasse erstellt, die von der TThread-Klasse erbt. Wenn wir also eine Instanz dieser Klasse im Programm erstellen, erstellen wir einen neuen Thread .
Als nächstes definieren Sie in dieser Klasse eine Sort-Methode, um das Array zu sortieren. Gleichzeitig geht die TSortThread-Klasse über die Konstruktormethoden Create und Execute der TThread-Klasse hinaus. In der Execute-Methode wird die Sort-Methode zum Sortieren des Arrays aufgerufen. Der spezifische Code lautet wie folgt:
unitmysort;
Schnittstelle
usedClasses;//Die TThread-Klasse ist in Classes definiert.
Typ
PSortArray=TSortArray;
TSortArray=array.[0..MaxIntdivSize??
Of(Integer)-1]ofInteger;
{Hier definierte TsortThread-Klasse}
TSortThread=class(TThread)
Privat
{Die folgenden privaten Variablen sind in der TSortThread-Klasse definiert}
fsortArray:PSortArray;
FSize:Integer;
FA,FB,FI,FJ:Integer;
Geschützt
{Klasse TSortThread geht über die Execute-Methode der Klasse Tthread hinaus}
Prozedur Execute;override;
{Klasse TsortThread fügt eine Sortiermethode hinzu}
procedure Sort(varA:arrayofInteger);
öffentlich
{Klasse TSortThread geht über die Konstruktormethode der Klasse Tthread hinaus}
KonstruktorCreate(varSortArray:arrayofInteger);
Ende;
Durchführung
KonstruktorTSortThread.Create(varSortArray:arrayofInteger);
beginnen
FSortArray:=@SortArray;
FSize:=High(SortArray)-Low(SortArray)+1;
FreeOn Terminate:=True;
inheritedCreate(False);
Ende;
{Wenn der Thread startet, wird die Execute-Methode aufgerufen. }
Prozedur TSortThread.Execu??
te;
beginnen
Sort(Slice(FSortArray,FSize));
Ende;
{Blasensortierung wird unten implementiert}
procedure TSortThread.Sort(varA:arrayofInteger);
var
I,J,T:Integer;
beginnen
forI:=High(A)downtoLow(A)do
forJ:=Low(A)toHigh(A)-1do
wennA[J]>A[J+1]dann
beginnen
T:=A[J];
A[J]:=A[J+1];
A[J+1]:=T;
ifTerminated then Exit;
Ende;
Ende;
Ende
Fügen Sie abschließend „usesmysort“ bei der Implementierung der Benutzeranwendung hinzu und fügen Sie „TQuickSortthread.Create(SortArray)“ dort hinzu, wo die Sortierung durchgeführt wird, wobei „SortArray“ ein tatsächliches Array ist. Auf diese Weise können Threads zum Implementieren der Sortierung verwendet werden. Während des Sortiervorgangs können Benutzer andere Vorgänge ausführen, ohne auf das Ende der Sortierung warten zu müssen. Diese Methode, mehrere Threads zu verwenden, um in Echtzeit auf Benutzervorgänge zu reagieren, ist besonders wichtig bei Anwendungen, die große Datenmengen verarbeiten.