Clock.cpp
Go to the documentation of this file.
00001 /*=============================================================================
00002   Copyright (C) 2012 Allied Vision Technologies.  All Rights Reserved.
00003 
00004   Redistribution of this file, in original or modified form, without
00005   prior written consent of Allied Vision Technologies is prohibited.
00006 
00007 -------------------------------------------------------------------------------
00008 
00009   File:        Clock.cpp
00010 
00011   Description: Implementation of a platform independent Sleep.
00012                (This include file is for internal use only.)
00013 
00014 -------------------------------------------------------------------------------
00015 
00016   THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
00017   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF TITLE,
00018   NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR  PURPOSE ARE
00019   DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 
00020   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
00021   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  
00023   AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
00024   TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
00025   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 
00027 =============================================================================*/
00028 
00029 #ifdef WIN32
00030     #include <sys/timeb.h>
00031     #include <windows.h>
00032 #else
00033     #include <sys/time.h>
00034     #include <unistd.h>
00035 #endif
00036 
00037 #include <VimbaCPP/Source/Clock.h>
00038 
00039 namespace AVT {
00040 namespace VmbAPI {
00041 
00042 Clock::Clock()
00043     :   m_dStartTime(0.0)
00044 {
00045 }
00046 
00047 Clock::~Clock()
00048 {
00049 }
00050 
00051 void Clock::Reset()
00052 {
00053     m_dStartTime = 0.0;
00054 }
00055 
00056 void Clock::SetStartTime()
00057 {
00058     m_dStartTime = GetAbsTime();
00059 }
00060 
00061 void Clock::SetStartTime( double dStartTime )
00062 {
00063     m_dStartTime = dStartTime;
00064 }
00065 
00066 double Clock::GetTime() const
00067 {
00068     double dTime = 0.0;
00069 
00070 #ifdef WIN32
00071     _timeb currSysTime;
00072 
00073     _ftime_s(&currSysTime);
00074 
00075     dTime = (currSysTime.time + ((double)currSysTime.millitm) / 1000.0);
00076 #else
00077     timeval now;
00078 
00079     if(gettimeofday(&now, (struct timezone *)0)) return 0.0;
00080 
00081     dTime = ((double)now.tv_sec) + ((double)(now.tv_usec) / 1000000.0);
00082 #endif
00083 
00084     return dTime - m_dStartTime;
00085 }
00086 
00087 double Clock::GetAbsTime()
00088 {
00089     double dAbsTime = 0.0;
00090 
00091 #ifdef WIN32
00092     _timeb currSysTime;
00093 
00094     _ftime_s(&currSysTime);
00095 
00096     dAbsTime = (currSysTime.time + ((double)currSysTime.millitm) / 1000.0);
00097 #else
00098     timeval now;
00099 
00100     if(gettimeofday(&now, (struct timezone *)0)) return 0.0;
00101 
00102     dAbsTime = ((double)now.tv_sec) + ((double)(now.tv_usec) / 1000000.0);
00103 #endif
00104 
00105     return dAbsTime;
00106 }
00107 
00108 void Clock::Sleep(double dTime)
00109 {
00110 #ifdef WIN32
00111     ::Sleep((unsigned long)(dTime * 1000.0));
00112 #else
00113     ::usleep((unsigned long)(dTime * 1000000.0));
00114 #endif
00115 }
00116 
00117 void Clock::SleepMS(unsigned long nTimeMS)
00118 {
00119 #ifdef WIN32
00120     ::Sleep(nTimeMS);
00121 #else
00122     ::usleep(nTimeMS * 1000);
00123 #endif
00124 }
00125 
00126 void Clock::SleepAbs(double dAbsTime)
00127 {
00128     Clock clock;
00129     double dTimeDiff = dAbsTime - clock.GetTime();
00130         
00131 #ifdef WIN32
00132     if(dTimeDiff > 4000000.0) dTimeDiff = 4000000.0;
00133 #else
00134     if(dTimeDiff >= 4000.0) dTimeDiff = 4000.0;
00135 #endif
00136     while(dTimeDiff > 0.0)
00137     {
00138         Sleep(dTimeDiff);
00139         dTimeDiff = dAbsTime - clock.GetTime();
00140 #ifdef WIN32
00141         if(dTimeDiff > 4000000.0) dTimeDiff = 4000000.0;
00142 #else
00143         if(dTimeDiff >= 4000.0) dTimeDiff = 4000.0;
00144 #endif
00145     }
00146 }
00147 
00148 }} //namespace AVT::VmbAPI


avt_vimba_camera
Author(s): Miquel Massot , Allied Vision Technologies
autogenerated on Thu Jun 6 2019 18:23:39