#include <iostream> #include <string> #include <time.h> #include <sys/time.h> #include <sstream> #include <stdlib.h> #include <string.h> #include <stdio.h> using namespace std; // this is the timer class from lab 6, included here so as not to // require multiple files to compile class timer { private: timeval startVar, stopVar; bool running; public: timer() : running(0) {} ~timer() {} timer(timer & myTimer); int start(); int stop(); string toString(); ostream & print(ostream &theStream); }; timer::timer(timer & t) : running(t.running) { memcpy(&startVar, &(t.startVar), sizeof (timeval)); memcpy(&stopVar, &(t.stopVar), sizeof (timeval)); } int timer::start() { if (!running) { running = true; gettimeofday(&startVar,NULL); return 0; } return 1; } int timer::stop() { if (running) { running = 0; gettimeofday(&stopVar,NULL); return 0; } return 1; } ostream & timer::print(ostream & out) { return (out << toString()); } string timer::toString() { ostringstream out; int ms, s, m, h; int totalmsec; if (running) out << "Timer still running\n"; else { time_t sec = stopVar.tv_sec - startVar.tv_sec; long usec = stopVar.tv_usec - startVar.tv_usec; if ( usec < 0 ) { sec--; usec += 1000000; } out << (sec*1000+usec/1000); } return out.str(); } ostream & operator<<(ostream &out, timer &t) { return t.print(out); } // this main method just counts the time taken to iterate 1 billion // times through an idle loop int main(int argc, char **argv) { // check the number of parameters if ( argc != 2 ) { cerr << "usage: " << argv[0] << " <iterations>" << endl; exit(1); } // convert the second parameter to a int int e, ret; ret = sscanf (argv[1], "%d", &e); if ( ret != 1 ) { cerr << "error reading input: '" << argv[1] << "'" << endl; exit (2); } // compute 10^e long n = 1; for ( int i = 0; i < e; i++ ) n *= 10; timer t; t.start(); // do something that takes some time... for ( long i = 0; i < n; i++ ); t.stop(); cout << t << endl; }