\

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

  • 3 Plugins ฟรีสำหรับ Visual Studio 2017 ที่ DEV ทุกคนควรมีไว้ในครอบครองแบบ must have
    05/02/2018 - 0 Comments
    เขียนโปรแกรมสาย .NET จำเป็นต้องใช้  Visual Studio อย่างแน่นอนซึ่งการทำงานบน tool…
  • เอา cmd ของกูคืนมา (กู้ชีพ cmd ใน WIN10)
    15/02/2018 - 0 Comments
    เมื่ออัพเดต Win10 สิ่งที่ตามมาคือการอัพเกรดซอฟแวร์ให้เข้ากับความปลอดภัย และปรังปรุง…
  • [TeamViewer] วิธีการ Remote Control เครื่องคอมในวงแลนเดียวกัน
    13/09/2013 - 2 Comments
    วิธีในการ connect เครื่องคอมของเพื่อนที่อยู่ในวงแลนเดียวกัน (Local area Network Connection) ผ่านโปรแกรม…
  • Tip : เล็กๆกับการ Commit SVN
    25/04/2013 - 0 Comments
    Trick เล็กๆน้อยกับการใช้งาน เต่า SVN : จริงๆแล้วการแก้ไข “ไฟล์เดียวกัน”…
  • วิธีแก้ Couldn't Mount File
    20/04/2015 - 0 Comments
    สำหรับไฟล์ประเภท iso บน Windows 8.1 สามารถ mount หรือจำลอง disk ตัวนั้นได้เป็นไดฟ์ตัวใหม่…
  • SQL SERVER ERROR: 40 บันทึกการพังของเอสคิวแอลเซิฟเวอร์
    25/08/2014 - 0 Comments
    SQL SERVER ERROR : 40 - Could not open connection to SQL Server ใครเจอ error code 40 ในตัว SQL SERVER…
  • จับผิด ถ้าคิดแอบใช้คอมเรา ด้วย Event Log
    27/05/2013 - 0 Comments
    เคยสงสัยกันไหมว่า ตอนเราไม่อยู่มีใครมาแอบเล่นคิมพิวเตอร์ของเราหรือเปล่า บางทีอาจเป็นเพื่อนของเรา…