Thread คืออะไร ?
เทรดก็คือการแบ่งภาระงานประมวลผล ลองนึกภาพง่ายๆว่ามีโปรแกรมคำนวนการบวกเลขไปเรื่อยๆท้ะงหมด 4 ชุด แทนที่เราจะทำที่ละชุดคือ ทำชุดแรกก่อน เร็จค่อยไปชุดสอง เราสามารถแบ่งเทรด ให้มันคำนวนทีเดียวทุกชุดทั้ง 4 ตัวได้ โดยเวลาที่ใช้ไปจะประหยัดขึ้นมาก
แล้ว
C# Thread เขียนยังไง มาดูกันครับ
อันดับแรกก็ต้องเพิ่มไลบราลี่ที่จำเป็นนั่นคือ using System.Threading; โดยหลักๆ Thread ใน C# ที่ผมใช้บ่อยๆ จะแบ่งออกเป็น 2 ประเภท นั่นคือ “แบบเรียกฟังชั่นไม่มีตัวแปร” และ ”แบบเรียกฟังชั่นมีตัวแปร” เมื่อเขียนโค๊ด จะได้ลักษณะดังนี้ครับ
ตัวอย่าง ThreadStart สำหรับฟังชั่นไร้ตัวแปร ตัวอย่างนี้จะสร้างเทรดขึ้นมา 2 ตัว แล้วรันทุกตัวพร้อมกัน โดยเรียกฟังชั่นทั้งสองคือ โหลดข้อมูลจาก Text file และจาก Database ซึ่งทั้งสองตัวนี้จะแบ่งเทรดทำงานแยกกัน
//
เริ่มสร้าง
Thread
Thread[] threadArray = new Thread[2];
for (int i = 0; i < threadArray.Length; i++)
{
if(i == 0 )
{
//ถ้า i เท่ากับ 1 จะทำฟังชั่นโหลดไฟล์
ThreadStart thread = new ThreadStart(loadTextFile);
threadArray[i] = new Thread(thread);
threadArray[i].Start();
}
else if (i == 1)
{
//ถ้า i เท่ากับ 1 จะทำฟังชั่นโหลดดาต้าเบส
ThreadStart thread = new ThreadStart(loadDB);
threadArray[i] = new Thread(loadDB);
threadArray[i].Start();
}
}
ตัวอย่าง ParameterizedThreadStart ตัวอย่างนี้เป็นการรันเทรดแบบมีตัวแปร นั่นคือผมจะรับค่า string ชื่อไฟล์เข้ามาด้วยเพื่อให้รู้ว่าต้องโหลดไฟล์ไหน
// เริ่มสร้าง Thread
Thread[] threadArray = new Thread[2];
for (int i = 0; i < threadArray.Length; i++)
{
if (i == 0)
{
// เริ่มสร้าง ParameterizedThreadStart.
ParameterizedThreadStart
thread = new ParameterizedThreadStart(loadTextFile);
threadArray[i] = new Thread(thread);
threadArray[i].Start("config.txt");
}
else if (i == 1)
{
// เริ่มสร้าง ParameterizedThreadStart.
ParameterizedThreadStart
thread = new ParameterizedThreadStart(loadDB);
threadArray[i] = new Thread(thread);
threadArray[i].Start("USERDB");
}
}
สุดท้ายคือคำสั่งส่งเทรดไปพักผ่อน นั่นคืออนุญาติให้เทรดงีบหลับได้ตามเวลาที่กำหนด แล้วจึงกลับมาทำงานต่อ ใช้คำสั่ง Thread.Sleep(time) เมื่อ time คือเวลามีหน่วยเป็น มิลิวินาที (millisecond) เช่น
Thread.Sleep(2000); หมายถึงให้เทรดพัก 2 วินาที แล้วจึงมาทำงานต่อบรรทัดถัดไป