• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2065
  • Last Modified:

How do I calculate Time elapsed between two processes in perl script in Milliseconds?

I have written perl program in which I want to check time elapsed between beginning and ending of STDIN input.For ex-If I input password from user , I need to calculate how many milliseconds user took to input password
I can realize this in seconds and microseconds using time() , date() and perl module Time::HiRes
Is there any way to calculate in Milliseconds?
0
saini_er
Asked:
saini_er
  • 4
  • 3
  • 3
  • +1
1 Solution
 
Adam314Commented:
Note that 1 millisecond is 1000 microseconds.  So if you have the elapsed time in microseconds, multiple that by 1000 to get the elapsed time in milliseconds.

Or you can get the time in seconds (using time() from Time::HiRes ), and divide that by 1000.
0
 
tomaugerdotcomCommented:

use Time::HiRes;
my $start = [ Time::HiRes::gettimeofday( ) ];
 
## Your code goes here
 
my $elapsed = Time::HiRes::tv_interval( $start );
print "Elapsed time: $elapsed seconds!\n";

Open in new window

0
 
tomaugerdotcomCommented:
Or use Benchmark - this is a great way to do all sorts of timer tests.
http://search.cpan.org/~andrewho/Benchmark-Timer-0.5/Timer.pm
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
RSLECommented:
1 millisecond = 1000 microseconds, thus divide your HiRes microsecond time() by 1000.
0
 
saini_erAuthor Commented:
Thanks everyone for quick response but I am working on time sensitive application where I need to see time difference at millisecond level and do comparison with previous results with room of few milliseconds variation. Definitely , divide/multiply will not give accurate result in milliseconds.
0
 
Adam314Commented:
If you are using the Time::HiRes module, and get the time in microseconds, multiplying this my 1000 will be very accurate.  Why would you think otherwise?
0
 
tomaugerdotcomCommented:
Please note that the time value that Time::HiRes() gives you is a floating-point integer, so you don't lose any decimals due to rounding. Eg: 1.54666574 * 1000 = 1546.66574 milliseconds.

It's not like you're getting a time integer in seconds (1.0).
0
 
saini_erAuthor Commented:
Is there any way to get result in real number i.e. 156 ms instead of 156.66574 ms  if I multiply/Divide by 1000
By using Microseconds , I am getting very inconsistent results. i.e. like 30000 microsec and then 435432 microseconds.So I am not sure If I round up this thing , will it be still accurate enough
0
 
Adam314Commented:
>>real number
I think you mean integer - a whole number

Normally, perl takes care of handling a number as an integer or a float automatically.  If you want to force it to do this as an integer, you can "use integer", and then call gettimeofday, which will return (in list context) the seconds and microseconds as an integer.

This isn't necessary though... here is a code snippet that shows demonstrates how to time how long it takes to get user input, in milliseconds (displayed as both a float and an integer)


use Time::HiRes qw[gettimeofday tv_interval];
 
my $time1=[gettimeofday()];
print "Enter something: ";
my $user=<STDIN>;
chomp $user;
my $milliseconds = tv_interval($time1)*1000;
 
 
print "User entered '$user'\n";
print "User tool $milliseconds milliseconds\n";
printf "User took %d milliseconds\n", $milliseconds;

Open in new window

0
 
saini_erAuthor Commented:
Thanks a lot.It seems to be working for me
0
 
saini_erAuthor Commented:
Thanks everyone for your time.I really appreciate...I think conversion will work for me...I wish if there was direct function to tell milliseconds which could have given more accurate answer..
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 4
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now