\

Facebook


วันจันทร์ที่ 5 พฤษภาคม พ.ศ. 2557

C# Threading เขียนโปรแกรมแบ่งเทรดยังไง



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 วินาที แล้วจึงมาทำงานต่อบรรทัดถัดไป

1 ความคิดเห็น:

ไม่ระบุชื่อ กล่าวว่า...
ความคิดเห็นนี้ถูกลบโดยผู้ดูแลระบบของบล็อก

May be like this posts