ข้ามไปที่เนื้อหาหลัก

บทความ

กำลังแสดงโพสต์จาก ธันวาคม, 2011

การอินเทอร์รัพท์ใน boost::thread

สืบเนื่องจากการใช้งาน std::thread ซึ่งผมคิดไปเองว่า gcc น่าจะรองรับมาตรฐาน C++11 ไปเรียบร้อยแล้ว แต่ปรากฎว่าไม่เป็นเช่นนั้นเนื่องจาก gcc ที่ใช้อยู่ในปัจจุบันเป็นรุ่นที่ 4.6 ยังไม่รองรับทั้งหมด (สถานะของมาตรฐาน c++ สำหรับ gcc 4.6 สามารถดูได้จาก Status of Experimental C++0x Support in GCC 4.6 ) และ std::thread ถึงแม้จะใช้งานได้บ้างแล้ว (สร้าง std::thread อ็อบเจกต์ได้ join ได้ แต่อินเทอร์รัพท์ไม่ได้) แต่ก็ยังต้องรอให้เธรดที่ถูกสร้างขึ้นจบการทำงานไปตามปรกติวิสัย ซึ่งในงานบางอย่างจำเป็นต้องใช้การอินเทอร์รัพท์เข้าช่วย ซึ่งในบทความนี้จะทดลองใช้งานไลบรารีเธรดจาก boost แทน เหตุผลนึ่งที่เลือกไลบรารีจาก boost เนื่องจาก boost::thread นั้นเหมือนกับมาตฐาน C++11 มากทีเดียว หาก gcc อิมพลีเมนท์ std::thread พร้อมที่จะให้ใช้งานแล้วการย้ายกลับไปใช้ std::thread จะทำได้ไม่ยากนัก เริ่มจากตัวอย่างง่ายๆ กันก่อน (ลอกตัวอย่างจาก เรื่องวุ่นๆ ของ std::thread ใน C++0x ) // boost_thread.cpp #include <iostream> #include <boost/thread.hpp> using namespace std; class DoWork { public: DoWork(){