วันพุธที่ 27 มิถุนายน พ.ศ. 2555

ทำให้ VFP ทำงานแบบ Multithread ด้วย ParellelFox


Simple 3 Steps to create and manage a thread in VFP

1.) oThreadMgr=NEWOBJECT("ThreadManager","threads.fxp")

2.) oThreadMgr.CreateThread("MyThreadFunc","myparameter",[MESSAGEBOX("My thread done!","Result")],[? "processing..."])
Param 1 - your code that will run in a background thread (in this example, MyThreadFunc)
Param 2 (optional) - any parameter you want to pass to your code (can pass multiple parameters separated by commas)
Param 3 (optional) - code that will run when your thread completes
Param 4 (optional) - code that will run in the foreground while your thread is processing (you could possibly add a progress bar here like the one in ctl32progressbar in VFPX)

3.) Other methods of the MT class:
oThreadMgr.SendMsgToStopThreads() - stop the threads
oThreadMgr.SuspendThreads() - pause the threads
oThreadMgr.ResumeThreads() - resume the threads

http://mtmyvfp.codeplex.com/


อธิบายตามคุณ NAS จากประเด็น Multitask กับ Multithread ต่างกันยังไง ดังนี้

Thread = โพรเซสขนาดเล็ก (Light Process) ที่ทำหน้าที่เฉพาะเจาะจงบางอย่างตามที่ผู้เขียนต้องการ
MultiThread = กลุ่มของโพรเซสขนาดเล็กที่ทำงานร่วมกันใต้แอพพลิเคชั่นหนึ่งๆ เช่น แอพพลิเคชั่น Word, IE, ...

หากคุณเปิด Task Manager ขึ้นมาดู จะพบ Thread อยู่ในกรอบสี่เหลี่ยมสีแดงตัวบนครับ
ส่วน Processes ด้านล่าง อุปมาอุปมัยได้ว่าเป็นจำนวนของแอพพลิเคชั่นดังภาพ



จะเห็นว่าตอนนี้มีจำนวน Thread ทั้งหมดคือ 700 และแอพพลิเคชั่นต่างๆ รวมกันทั้งหมด 73 ตัว เมื่อผมเปิด IE ขึ้นมาใหม่อีก 1 ตัว จำนวน Thread และแอพพิเคชั่นจะเป็นดังภาพด้านล่าง



จะเห็นว่าจำนวนแอพพลิเคชั่นเพิ่มขึ้นมา 1 ตัว ซึ่งมันก็คือ IE ที่ผมเปิดขึ้นมานั่นเอง
และ IE ตัวนี้ก็ใช้ Thread ทั้งหมด 713-700 = 13 ตัวมาทำงานร่วมกันครับ

MultiTasking เป็นคุณสมบัติที่ไมโครซอฟต์คุยไว้ตั้งแต่แรกๆ ครับว่า OS ของเค้านี้สามารถอนุญาตให้แอพพลิเคชั่นหลายๆ ตัวทำงานพร้อมๆ กันได้ในเวลาเดียวกัน ซึ่งหากคุณไปดูที่แท็ป Applications ของ Task Manager คุณจะพบว่ามีแอพพลิเคชั่นอยู่หลายๆ ตัวที่ทำพร้อมๆ กันในตอนนี้ดังภาพ



ดังนั้น สมมติว่าระบบงานเราต้องนำเข้าไฟล์ 5 ไฟล์ สมมติมีไฟล์ A - E เวลาทำงานก็จะนำเข้าทีละไฟล์ตามลำดับ แต่ ParallelFox จะทำให้เราสามารถนำเข้าไฟล์ทั้ง 5 ได้พร้อมๆ กัน อะไรประมาณนั้นครับ...

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

  1. ผมความรู้ไม่ถึง เลยไม่เข้าใจอะ เอาแบบบ้าน ๆ มันเอาไปทำประโยชน์อย่างไรครับ พอจะยกตัวอย่าง application สักตัวได้ไม๊ครับ ได้โปรด อิอิ

    ตอบลบ
  2. ยกตัวอย่างประมาณ Bittorent ก็แล้วกันครับน่าจะเห็นชัดดี ปกติถ้าเขียนโปรแกรมแบบที่เราเขียนมันทำงานเป็นลำดับ โดยโหลดทีละไฟล์ๆ แต่การทำ Parallel ก็จะโหลดทุกไฟล์ได้พร้อมๆกันครับ ... ประมาณนั้น

    ตอบลบ