จากตอนที่แล้วผู้เขียนได้ทดสอบสร้าง Thread Object หรือก็คือ Unit ที่บรรจุ Thread Class ไปแล้ว
เริ่มต้นพัฒนา Thread Object ใน Delphi (1/2) (http://systemdevman.blogspot.com/2011/05/thread-object-delphi-12.html)
ผู้เขียนจะปรับปรุง Code จากตัวอย่างที่แล้ว โดยสร้าง Thread Class เข้าไปใน Unit เดียวกับฟอร์ม
ก็จะมีความง่ายกว่าในแบบแรก เพราะ Thread สามารถใช้งานองค์ประกอบต่างๆที่อยู่บนฟอร์มได้ ไม่ว่าจะเป็น Control ต่างๆ หรือ method ของที่อยู่ใน Class ของ Form
ผู้เขียนจะปรับเปลี่ยนให้ Class แสดงอายุของพนักงานแต่ละท่านออกมาโดยคำนวณจากวันเกิด
Thread Class ที่สร้างขึ้นมีเพียง method Execute เพื่อใช้ทำงานเท่านั้น
TthdEmployeeAge = class(TThread)
protected
procedure Execute; override;
end;
ภายใน method Execute มีการปรับปรุงเล็กน้อย
procedure TthdEmployeeAge.Execute;
Var
itemText: String;
birth: TDateTime;
age: Integer;
begin
inherited;
with form1.DataSource1.DataSet do
Begin
First; //ไปที่ข้อมูลแถวแรกก่อน
form1.ListBox1.Clear; //ล้างข้อมูลใน ListBox
while not Eof do
Begin
itemText:='รหัสพนักงาน '+FieldByName('EMP_COD').AsString;
itemText:=itemText + ' ชื่อ '+ FieldByName('EMP_NAM1').AsString + FieldByName('EMP_NAM2').AsString;
itemText:=itemText + ' นามสกุล '+ FieldByName('EMP_NAM3').AsString;
//เก็บค่าวันเเกิด
birth:=FieldByName('EMP_BRTH').AsDateTime;
//คำนวณอายุ
age:=YearOf(Now) - YearOf(birth);
itemText:=itemText+' อายุ '+IntToStr(age)+' ปี';
form1.ListBox1.Items.Add(itemText);
Next;
end;
end;
end;
การเรียกใช้ จาก Event FormShow() ก็ใช้ Constructor ตัวเดิมที่ Inheritance มาจาก TThread
procedure TForm1.FormShow(Sender: TObject);
begin
TthdEmployeeAge.Create(false);
end;
ลองทดสอบโปรแกรมก็จะได้ผลคล้ายเดิม แต่จะมีการคำนวณอายุของพนักงานออกมาแทนเพศ
สรุป
การสร้าง Thread Class ขึ้นมาใช้แบบง่ายๆ ทั้งสองแบบนี้ ต่างก็เหมาะสมกับการทำงานแต่ละอย่าง แต่ละจุดประสงค์ Thread Object ซึ่งเป็นไฟล์ Unit แบ่งออกมาชัดเจนนั้นก็จำเป็นต้องสร้างให้มีความยืดหยุ่น ให้มีการทำงานได้จากหลายๆ ที่ในโปรแกรม ส่วนการเขียน Thread ลงไปใน Unit ที่มีอยู่แล้วนั้น อาจจะนำไปใช้ในการเฉพาะของ Unit นั้นๆ เขียนง่ายๆ ทำงานเฉพาะหน้าที่เดียว จึงไม่จำเป็นต้องมีความยืดหยุ่นมาก
Source Code ภายใน Unit1.pas หรือ Form1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB;
type
TthdEmployeeAge = class(TThread)
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
ADOTable1EMP_COD: TStringField;
ADOTable1EMP_NAM1: TStringField;
ADOTable1EMP_NAM2: TStringField;
ADOTable1EMP_NAM3: TStringField;
ADOTable1EMP_SEX: TStringField;
ADOTable1EMP_BRTH: TDateTimeField;
ListBox1: TListBox;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses DateUtils;
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
TthdEmployeeAge.Create(false);
end;
{ TthdEmployeeAge }
procedure TthdEmployeeAge.Execute;
Var
itemText: String;
birth: TDateTime;
age: Integer;
begin
inherited;
with form1.DataSource1.DataSet do
Begin
First; //ไปที่ข้อมูลแถวแรกก่อน
form1.ListBox1.Clear; //ล้างข้อมูลใน ListBox
while not Eof do
Begin
itemText:='รหัสพนักงาน '+FieldByName('EMP_COD').AsString;
itemText:=itemText + ' ชื่อ '+ FieldByName('EMP_NAM1').AsString + FieldByName('EMP_NAM2').AsString;
itemText:=itemText + ' นามสกุล '+ FieldByName('EMP_NAM3').AsString;
//เก็บค่าวันเเกิด
birth:=FieldByName('EMP_BRTH').AsDateTime;
//คำนวณอายุ
age:=YearOf(Now) - YearOf(birth);
itemText:=itemText+' อายุ '+IntToStr(age)+' ปี';
form1.ListBox1.Items.Add(itemText);
Next;
end;
end;
end;
end.
Most popular
-
Trigger คืออะไร? ท่านที่เคยเขียนโปรแกรม และเคยใช้ Event handle ก็จะนึกถึงการทำงานของ Trigger ไม่ยาก Trigger ก็คือ Code คำสั่ง SQL ที่ถูกสร...
-
MySQL Workbench ที่ผู้เขียนใช้ทำตัวอย่างเป็น Version 5.2.34 CE สำหรับ Windows 32 bit หรือตัวใหม่กว่าก็ได้ครับ ดาวน์โหลดได้ที่นี่ http://www...
-
คนที่มีภาพใน facebook เยอะๆก็คงจะต้องการย้ายภาพไปมา บางทีก็เอาภาพบนกระดานเก็บลงอัลบั้ม บางทีก็หาไม่เจอว่าจะย้ายได้ยังไง การย้ายอัลบั้มไม่ยา...
-
Tier คำนี้เมื่อแปลออกมาจะแปลได้ว่า "ชั้น" Tier ในวงการ Software ก็มีความหมายคล้ายกัน สำหรับท่านที่ยังไม่เข้าใจขอแนะนำง่ายๆ โดยให้...
-
หลายท่านคงเคยเล่น หรือไม่ก็รู้จักชื่อเสียงเรียงนามของเกมนี้กันบ้าง หลังจากที่โด่งดังมาจากวงการ Tablet และ Smart Phone ก็ได้ออก Version ที่เล...
วันอาทิตย์ที่ 22 พฤษภาคม พ.ศ. 2554
เริ่มต้นพัฒนา Thread Object ใน Delphi (2/2)
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
เข้ามาอ่านเรื่อง thread ทั้งสองตอนในตอนที่ 1 ผมได้ขอให้เขียนอ่านฐานข้อมูลมาใส่ combo พอมาอ่านตอนที่ 2 คิดว่าพอได้คำตอบแล้วครับ ขอบคุณสำหรับสิ่งดี ๆ ที่แบ่งปันนะครับ
ตอบลบจะแวะมาเป็นขาประจำครับ
ขอบคุณครับ