OSDN Git Service

impl make_trans2
[moflib/moflib.git] / moflib-2.0 / src / mof / util / windows / multimedia_timer.cpp
1 #include <mof/util/multimedia_timer.hpp>
2 #include <windows.h>
3 #include <iostream>
4
5
6 namespace mof
7 {
8 namespace util
9 {
10 //{{{ impl
11     struct multimedia_timer::impl
12     {
13                 LARGE_INTEGER start_time_;
14                 double frequency_;
15     };
16 //}}}
17 //{{{ constructor
18     multimedia_timer::multimedia_timer()
19     : pimpl_(new impl)
20     {
21                 LARGE_INTEGER frequency;// count per sec
22                 QueryPerformanceFrequency(&frequency);
23                 pimpl_->frequency_ = static_cast<double>(frequency.QuadPart) / 1000000;// count per micro sec
24         reset();
25     }
26 //}}}
27 //{{{ destructor
28     multimedia_timer::~multimedia_timer(){}
29 //}}}
30 //{{{ reset
31     void multimedia_timer::reset()
32     {
33                 QueryPerformanceCounter(&pimpl_->start_time_);
34     }
35 //}}}
36 //{{{ get_time_in_micro_sec
37     mof::uint64 multimedia_timer::get_time_in_micro_sec() const
38     {
39                 LARGE_INTEGER current_time;
40                 QueryPerformanceCounter(&current_time);
41                 double span = static_cast<double>(current_time.QuadPart - pimpl_->start_time_.QuadPart) / pimpl_->frequency_;
42                 return static_cast<int>(span);
43     }
44 //}}}
45
46 }// namespace util
47 }// namespace mof
48