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

บทความ

กำลังแสดงโพสต์ที่มีป้ายกำกับ boost

การอินเทอร์รัพท์ใน 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(){...

ไฟล์และไดเรกทอรีด้วยชุดไลบรารี boost

ต่อจาก ชุดไลบรารี date_time ของ Boost  วันนี้เลยบันทึกเกี่ยวกับการจัดการไฟล์และไดเรกทอรีด้วยชุดไลบรารีของ  boost  สักนิด สำหรับชุดที่สนใจคือ filesystem  สำหรับ filesystem เองหากพิจารณาแล้วมี class ที่น่าสนใจคือ path directory_entry directory_iterator recursive_directory_iterator file_status ที่อาจจะต้องใช้งานแล้วแต่กรณี แต่ที่ใช้ประจำเห็นคงหนีไม่พ้น path เนื่องจากเป็น class ที่ใช้ระบุตำแหน่งไฟล์นั้นเอง ส่วนที่เหลือจะเป็น operational functions ที่ใช้ร่วมกับ class ที่กล่าวไปแล้ว แต่ส่วนใหญ่จะใช้งานออปเจคของ path นั้นเอง มาดูตัวอย่างแรกกันดีกว่า // directory.cpp #include <iostream> #include <string> #include <boost/filesystem.hpp> using namespace std; using namespace boost::filesystem; int main(){ string directory_path = "/tmp/test"; path p(directory_path); if (exists(p)) cout << p << " exists" << endl; else{ cout << p << " does not exist" << endl; if (create_directory(p))   cout ...

ชุดไลบรารี date_time ของ Boost

เนื่องจากตอนนี้กลับมาเขียน C++ เป็นหลัก จึงอยากเขียนหลายๆ อย่างให้อยู่ในรูปของอ็อบเจกต์ด้วย จึงหาไลบรารีมาใช้งาน ที่สนใจตอนนี้คือไลบรารีเรื่องของวันและเวลาจากชุดไลบรารีของ boost ซึ่งชุดไลบรารีของ boost เองหลายชุดได้กลายเป็นแม่แบบมารตฐาน C++11 ด้วย สำหรับตอนนี้สนใจเรื่องเกี่ยบกับเวลา เราอาจจะเลือกใช้ ctime ได้แต่อาจจะอยู่ในรูปปของฟังก์ชันและพอยน์เตอร์ หรือ tm struct แต่การใช้ tm struct เราอาจจะต้องมาจัดการเรืองของช่วงเวลาเอง อาจจะยุ่งยากเล็กน้อย ลองมาดูไลบรารี date_time ของ boost กันดีกว่า // date_time.cpp #include <iostream> #include <boost/date_time/posix_time/posix_time.hpp> using namespace::std; int main(){ boost::posix_time::ptime t1 = boost::posix_time::microsec_clock::local_time(); cout<<"time t1: " << boost::posix_time::to_simple_string(t1) <<endl; sleep(1); boost::posix_time::ptime t2 = boost::posix_time::microsec_clock::local_time(); cout<<"time t2: " << boost::posix_time::to_simple_string(t2) ...