10 October 2013

เธรดอย่างง่ายใน C#

[ย้ายบทความจาก Gushared.com]
    (Threading Tutorial) บางครั้งที่เราเขียนโปรแกรมเราอาจจะให้โปรแกรมทำงานเป็นงานๆไป จนกว่าจะเสร็จกระบวนการแล้วค่อยทำงานชิ้นต่อไป แต่ในโลกความเป็นจริงคอมพิวเตอร์จำเป็นต้องทำงานหลายๆงานพร้อมกัน จึงทำให้เกิดเธรดขึ้นมาเพื่อนแยกการทำงานเพื่อให้งานเสร็จไวขึ้น พูดง่ายๆ ก็เหมือนกับคนเราเวลาดูโทรทัศน์ที่จะต้องฟังเสียงและดูภาพไปพร้อมๆกัน หัวข้อนี้ผมจะมาลองเขียน Thread แบบง่ายๆโดยมีโจทย์ให้เขียนโปรแกรมโดยให้ฟังก์ชันแรกปริ้นข้อความไปสักพักแล้วให้อีกฟังก์ชันปริ้นอีกข้อความขึ้นพร้อมๆกัน
    โดยขั้นแรกเราจะมาเขียนฟังก์ชั่นปริ้นค่าก่อนด้วยโค๊ดต่อไปนี้
        public static void Thread1()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Thread 1");
                Thread.Sleep(1000);
            }
        }

        public static void Thread2()
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Thread 2");
                Thread.Sleep(1000);
            }
        }
   จะสังเกตว่า 2 ฟังก์ชันนี้เหมือนกันนะครับ จะสังเกตเห็น Thread.Sleep(1000); อันนี้คือผมจะให้มันหยุดไปชั่วขณะ 1 วินาทีก่อนที่จะทำรอบต่อไป อ่อ ! อย่าลืม using System.Threading; นะครับเวลาเรียกใช้ Thread ตามโจทย์ก็คือผมจะให้ฟังก์ชัน Thread1 ทำงานไปประมาณ 5 วินาทีแล้วจะให้ฟังก์ชัน Thread2 ทำงานและสองฟังก์ชันนี้จะทำงานไปพร้อมๆกันครับ
    ต่อมาใน main ฟังก์ชันเราจะเขียนโค๊ดดังต่อไปนี้ครับ
        static void Main(string[] args)
        {
            Thread threadA = new Thread(new ThreadStart(Thread1));
            Thread threadB = new Thread(new ThreadStart(Thread2));
            threadA.Start();
            Thread.Sleep(5000);  //Delay 5s
            threadB.Start();
        }
    เข้าใจกันง่ายๆก็เหมือนกับว่าเราสร้าง Thread ขึ้นมาแล้วสั่งให้มันเริ่มทำงานนั่นแหละครับเดี๋ยวลองดูการรันโปรแกรมของผมดูนะครับ ว่าผลจะเป็นยังไง ^_^