วันพุธที่ 30 เมษายน พ.ศ. 2551

wxWidgets part: wxThread

หลังจากที่สร้้างฟอร์มเสร็จอย่่างสวยงามได้ดังใจมาแล้ว ก็ถึงคราวใส่อะไรๆลงไป รูปข้างบนผมได้เขียนโค้ดการรับภาพจากกล้อง cctv ซึ่งต่อกับการ์้ด DVR แบบ real-time 4 channel โดยใช้ API คือ Video For Linux 2 และใช้ OpenCV library ช่วยในการจัดการภาพในขั้นตอนต่อๆไป พอดีว่ามีสายอยู่สามเส้นจึงทดลองต่อกล้องได้สามตัว

wxWidgets ทำให้ผมประทับใจอีกครั้ง ด้้วยการสนับสนุนการเขียน multi-thread และคำนึงถึงการติดต่่อระหว่าง worker thread และ main thread ซึ่งปรกติจะรัน GUI ทำให้ออกแบบโปรแกรมและเขียนโค้ดได้ง่ายขึ้น

อย่างที่ผมทำนั้น ได้ใช้วิธีการสร้าง worker thread ซึ่งจะทำหน้้าที่ติดต่่อกับกล้อง 1 thread ต่อ 1 ตัวแล้วก็ส่งภาพมาให้ window object แต่ละช่องทำการวาด

จากเอกสารและตัวอย่างนั้นได้แนะนำเอาไว้ว่า

1. ไม่ควรมีการเรียก GUI function จาก thread เกินกว่า 1 thread
2. ถ้าต้องการทำ ให้ใช้วิธี post event แทนซึ่ง function ที่สนับสนุนนั้นเป็น thread safe จึงไม่ต้องกังวล
3. อีก 2 ฟังก์ชั่นที่สำคัญคือ wxMutexGuiEnter และ wxMutexGuiLeave

ไม่มีความคิดเห็น: