Skip to content

Instantly share code, notes, and snippets.

@torque
Created January 4, 2015 21:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save torque/7f95f39f12bcb45c4c4d to your computer and use it in GitHub Desktop.
Save torque/7f95f39f12bcb45c4c4d to your computer and use it in GitHub Desktop.
// clang++ BadTimer.cpp -fPIC -shared -O3 -std=c++11 -o BadTimer.dylib
#include <chrono>
class BadTimer {
private:
std::chrono::high_resolution_clock::time_point startTime;
std::chrono::high_resolution_clock::time_point endTime;
std::chrono::duration<double> timeSpan;
public:
BadTimer( void );
double getElapsedTime( void );
};
BadTimer::BadTimer( void ) {
startTime = std::chrono::high_resolution_clock::now( );
}
double BadTimer::getElapsedTime( void ) {
endTime = std::chrono::high_resolution_clock::now( );
timeSpan = std::chrono::duration_cast<std::chrono::duration<double>>(endTime - startTime);
return timeSpan.count( );
}
extern "C" {
void* startTimer( void ) {
return new BadTimer;
}
double getDuration( BadTimer *badTimer ) {
return badTimer->getElapsedTime( );
}
void freeTimer( BadTimer *badTimer ) {
delete badTimer;
}
}
ffi = require"ffi"
ffi.cdef[[
void* startTimer( void );
double getDuration( void* );
void freeTimer( void* );
]]
badTimer = ffi.load"./BadTimer.dylib"
bad = badTimer.startTimer( )
print(("%g us"):format(badTimer.getDuration(bad)*1000000))
print(("%g us"):format(badTimer.getDuration(bad)*1000000))
print(("%g us"):format(badTimer.getDuration(bad)*1000000))
badTimer.freeTimer(bad)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment