Solved

High-res timing

Posted on 2000-03-20
6
222 Views
Last Modified: 2010-04-02
Within Windows 95/98/2000 how can I get timing down to the millisecond resolution?  I have been using timeGetTime() but, because of the WinAPI overhead, it is too slow.  Also, timeGetTime() is only accurate within approximately 8ms (I think) and I need timing that is accurate at the 1 or 2ms level.

Help is very much appreciated,
- Alex
0
Comment
Question by:Egore
  • 5
6 Comments
 
LVL 1

Expert Comment

by:wildy
ID: 2635264
You must use the multimedia timers. Look for timeSetEvent in the help.
0
 
LVL 5

Accepted Solution

by:
Wyn earned 100 total points
ID: 2635275

You'd use mutilmedia-timer below for high resolution:

BOOL QueryPerformanceFrequency(
  LARGE_INTEGER *lpFrequency   // pointer to current frequency);

BOOL QueryPerformanceCounter(
  LARGE_INTEGER *lpPerformanceCount   // pointer to counter value);

Check for more:
Win32 Multithreading Performance
http://msdn.microsoft.com/library/techart/msdn_threadli.htm


Regards
W.Yinan
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2635278
Ignore last link I give,here I will give enough info to you...

Continue:
0
Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

 
LVL 5

Expert Comment

by:Wyn
ID: 2635284
The Pentium processor and most PC compatible processors such as AMD support a high-resolution Performance Counter, which can provide a resolution of less than **one microsecond**.
The QueryPerformanceFrequency function is used to determine the actual frequency of the counter.  This is the numeric value that the Performance Counter will increase by in 1 second.

The QueryPerformanceCounter function is used to read the Performance Counter, which may be divided by the counter frequency to determine the time in seconds.

Both of these functions take a pointer to a LARGE_INTEGER union, which will be filled with the requested value if the function is successful.

The function will return 0 on failure, or non-zero on success.
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2635326
//Hi , Egore
//Here is the way to initialize it.

LONGLONG perf_cnt;
LONGLONG the_time;


QueryPerformanceFrequency((LARGE_INTEGER *) &perf_cnt));

// read initial time

QueryPerformanceCounter((LARGE_INTEGER *) &the_time);

//you get the current count stored into the_time.


The QueryPerformanceCounter function retrieves the current value of the high-resolution performance counter (if one exists on the system). By calling this function at the beginning and end of a section of code, an application essentially uses the counter as a high-resolution timer. For example, suppose that QueryPerformanceFrequency indicates that the frequency of the high-resolution performance counter is 50,000 counts per second. If the application calls QueryPerformanceCounter immediately before and immediately after the section of code to be timed, the counter values might be 1500 counts and 3500 counts, respectively. These values would indicate that .04 seconds (2000 counts) elapsed while the code executed."



Okay,hope helpful and good luck

Regards
W.Yinan
0
 
LVL 5

Expert Comment

by:Wyn
ID: 2635336
Btw: You can call QueryPerformanceCounter() later and check with the_time to get hwo many counters elapse.

Because you already know counter times per second.Then you can figure out the time in between.This resolutionn is very high but I figure the TimegetTime() should around 1 millisecond.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question