เมื่อการประมวลผลข้อมูลมีปริมาณมาก จะตอบสนองต่อการทำงานของผู้ใช้ขณะประมวลผลข้อมูลอย่างไร Windows95/98 และ WindowsNT เป็นระบบปฏิบัติการแบบมัลติเธรด หน่วยการกำหนดเวลาคือเธรด นั่นคือ เธรดเป็นหน่วยพื้นฐานสำหรับระบบในการจัดสรรทรัพยากรเวลาของตัวประมวลผล ดังนั้นเราจึงสามารถใช้เธรดเพื่อประมวลผลชุดงานขนาดใหญ่ ของข้อมูลในขณะที่ตอบสนองต่อการทำงานของผู้ใช้
ในฐานะแพลตฟอร์มการพัฒนาที่ยอดเยี่ยม DELPHI ให้การสนับสนุนอย่างมากสำหรับการพัฒนาแอปพลิเคชันแบบมัลติเธรด คุณสามารถใช้ฟังก์ชันอินเทอร์เฟซ Win32API CreateThread ที่ได้รับจากสภาพแวดล้อม Windows 32 บิตได้โดยตรง หรือคุณสามารถใช้ฟังก์ชัน BeginThread ที่ให้ไว้ใน DELPHI ในตัวอย่างต่อไปนี้ จะใช้คลาส TThread ที่ DELPHI จัดเตรียมไว้ให้
หนึ่ง. วิธีการพื้นฐานมีดังนี้:
1. รับคลาสใหม่จากคลาส Tthread (สร้างคลาส TSortThread)
2. กำหนดวิธีการสร้างของคลาสใหม่
3. กำหนดวิธีการ Execute ของคลาสใหม่ และแทรกรหัสที่ดำเนินการเมื่อเธรดกำลังทำงานในวิธีการ Execute
4. สร้างอินสแตนซ์โดยใช้วิธีคลาสอ้างอิง
สอง. รหัสโดยละเอียดและคำอธิบายของตัวอย่าง:
ขั้นแรก สร้างหน่วยใหม่และบันทึกเป็น mysort.pas ในหน่วยนี้ เราได้สร้างคลาส TSortThread ซึ่งสืบทอดมาจากคลาส TThread ดังนั้นเมื่อเราสร้างอินสแตนซ์ของคลาสนี้ในโปรแกรม เราจะสร้าง สร้างเธรดใหม่ .
ถัดไป กำหนดวิธีการเรียงลำดับในคลาสนี้เพื่อเรียงลำดับอาร์เรย์ ในเวลาเดียวกัน คลาส TSortThread จะอยู่เหนือวิธีการสร้างและดำเนินการของคลาส TThread ในวิธีการดำเนินการ วิธีการเรียงลำดับสำหรับการเรียงลำดับอาร์เรย์จะถูกเรียก รหัสเฉพาะมีดังนี้:
หน่วยการจัดเรียง;
อินเตอร์เฟซ
useClasses;//คลาส TThread ถูกกำหนดไว้ในคลาส
พิมพ์
PSortArray=TSortArray;
TSortArray=อาร์เรย์[0..MaxIntdivSize??
จาก(จำนวนเต็ม)-1]ของจำนวนเต็ม;
{คลาส TsortThread กำหนดไว้ที่นี่}
TSortThread=คลาส(TThread)
ส่วนตัว
{ตัวแปรส่วนตัวต่อไปนี้ถูกกำหนดไว้ในคลาส TSortThread}
fsortArray:PSortArray;
FSขนาด:จำนวนเต็ม;
FA,FB,FI,FJ:จำนวนเต็ม;
ได้รับการคุ้มครอง
{Class TSortThread อยู่เหนือวิธีการ Execute ของคลาส Tthread}
ขั้นตอนดำเนินการ; แทนที่;
{Class TsortThread เพิ่มวิธีการเรียงลำดับ}
ขั้นตอนการเรียงลำดับ (varA: arrayofInteger);
สาธารณะ
{Class TSortThread อยู่เหนือวิธี Constructor ของคลาส Tthread}
ตัวสร้างสร้าง (varSortArray:arrayofInteger);
จบ;
การดำเนินการ
ConstructorTSortThread.Create (varSortArray: arrayofInteger);
เริ่ม
FSortArray:=@SortArray;
FSize:=สูง(จัดเรียงอาร์เรย์)-ต่ำ(จัดเรียงอาร์เรย์)+1;
FreeOn ยุติ:=จริง;
สืบทอดสร้าง (เท็จ);
จบ;
{เมื่อเธรดเริ่มต้น วิธีการดำเนินการจะถูกเรียก -
ขั้นตอน TSortThread.Execu??
เต้;
เริ่ม
เรียงลำดับ(ชิ้น(FSortArray,FSize));
จบ;
{มีการใช้การเรียงลำดับแบบบับเบิ้ลด้านล่าง}
ขั้นตอน TSortThread.Sort (varA: arrayofInteger);
var
I,J,T:จำนวนเต็ม;
เริ่ม
สำหรับI:=สูง(A)ลงต่ำ(A)ทำ
สำหรับ J:=ต่ำ(A)ถึงสูง(A)-1do
ถ้าA[J]>A[J+1]แล้ว
เริ่ม
ต:=ก[เจ];
อ[เจ]:=เอ[เจ+1];
A[เจ+1]:=T;
ifTerminated แล้วออก;
จบ;
จบ;
จบ
สุดท้าย ให้เพิ่ม usemysort ในการใช้งานแอปพลิเคชันผู้ใช้ และเพิ่ม TQuickSortthread.Create(SortArray) โดยที่การเรียงลำดับจะดำเนินการ โดยที่ SortArray เป็นอาร์เรย์จริง ด้วยวิธีนี้ สามารถใช้เธรดเพื่อดำเนินการเรียงลำดับได้ ในระหว่างกระบวนการเรียงลำดับ ผู้ใช้สามารถดำเนินการอื่นๆ ได้โดยไม่ต้องรอให้การเรียงลำดับสิ้นสุดลง วิธีการใช้หลายเธรดเพื่อตอบสนองต่อการทำงานของผู้ใช้แบบเรียลไทม์นี้มีความสำคัญอย่างยิ่งในแอปพลิเคชันที่เกี่ยวข้องกับการประมวลผลข้อมูลจำนวนมาก