Sunday, June 12, 2005

บันทึก: June 11, 2005

  1. จะวัด relative time จากจุดที่สนใจ
    เราสามารถใช้ GetTickCount() ได้ โดยที่ฟังก์ชันนี้ปรกติจะคืน เวลาในหน่วย millisecond นับตั้งแต่เปิดเครื่องขึ้นมาให้เรา

  2. การใช้ class-member static variable ใน C++
    วิธีใช้ค่อนข้างจะจุกจิกเล็กน้อยสำหรับ C++ นอกจากเราจะต้องทำการประการไว้ที่ header ของคลาสแล้ว เราจะต้องทำการ initialize มันในระดับ global ด้วย (โดยปรกติกจะ init ไว้หน้า main function)
    ตัวอย่าง
    class ExperimentLog
    {
    public:
    static fstream* fileLog;

    static void initFileLog( CString strDirName, CString strFileName );
    static void writeCoordinate( int x, int y, int z );
    static void writeAffineParams( float arAffineParam[] );
    static void writePts( float arPts[], int nNumPts );
    static void writeCurvePtsWithDistance( float arPts[], int nNumPts );


    ExperimentLog(void);
    ~ExperimentLog(void);

    private:
    static char bufX[8];
    static char bufY[8];
    static char bufZ[8];

    public:
    static void test(void);
    };

    //Initialize static members
    fstream* ExperimentLog::fileLog = NULL;
    char ExperimentLog::bufX[8];
    char ExperimentLog::bufY[8];
    char ExperimentLog::bufZ[8];

    void main() { ... }

  3. การแปลงเลขทศนิยมให้เป็น string
    มีฟังก์ชันที่ทำหน้าที่นี้ได้อยู่สามตัวคือ _fcvt, _ecvt และ _gcvt แต่ก็ไม่มีอันไหนใช้ง่ายซะทีเดียว ที่ลองใช้มาพบว่าแบบ scienctific น่ะดีที่สุดแล้ว (คือใช้ _gcvt นั่นเอง)
    ตัวอย่าง
    const int nPrecision = 9;

    char* bufAffine = new char[20];
    //int nDecimalLocation, nSign;
    int nDotPosition;

    CString strInitial = "Z Axis (radian): ";
    _gcvt( arAffineParam[1], nPrecision, bufAffine );
    *fileLog << strinitial = "X Axis (radian): ">

No comments: