Re: elapsed time 0 with std::cin
"James Kanze" <james.kanze@gmail.com> wrote in message
news:ef3426bb-2220-430c-ae95-6b5f109d0423@j20g2000hsi.googlegroups.com...
On Nov 23, 9:43 pm, "Jim Langston" <tazmas...@rocketmail.com> wrote:
"pekka" <pe...@nospam.invalid> wrote in message
[...]
Here's my code:
#include <ctime>
#include <iostream>
#include <string>
class Timer
{
clock_t start_, nticks_;
public:
Timer() : nticks_(0) { start(); }
~Timer() {}
void start() { start_ = clock(); }
void stop() { nticks_ = clock() - start_; }
double elapsed() const { return double(nticks_) / CLOCKS_PER_SEC; }
};
int main()
{
std::string answer;
Timer T;
// for (int n=0; n<100000000; ++n);
std::cout << "? ";
std::cin >> answer;
T.stop();
std::cout << "time elapsed: " << T.elapsed() << "\n";
}
If I use the loop at the commented line, instead of
std::cin, the timer works as expected. I can't figure out
what's wrong here.
I run this code and I get numbers output such as 3.0532
I'm using VC++ 2003
That's a known bug in VC++ (or maybe the Windows runtime
libraries---I'm not sure at what level it occurs). If you get
anything but 0 for a keyboard wait, you're implementation is
incorrect (or the underlying system simply doesn't keep track of
the information).
--------------
MSDN for clock function says this:
ANSI 4.12.2.1 The era for the clock function
The clock function's era begins (with a value of 0) when the C program
starts to execute. It returns times measured in 1/CLOCKS_PER_SEC (which
equals 1/1000 for Microsoft C).
I take it that there's supposed to be more to it than that then?