승인됨: Fortect
지난주쯤에 일부 독자가 Win32 고성능 카운터 오류에 부딪쳤습니다. 몇 가지 요인으로 인해 이 문제가 발생할 수 있습니다. 아래에서 이야기하겠습니다.
<울><리>
이 버퍼가 타이밍 모양에 사용될 수 있는 긴 응답 시간(<1μs)을 상징하는 성능 카운터의 현재 값을 가져옵니다.
구문
승인됨: Fortect
Fortect은 세계에서 가장 인기 있고 효과적인 PC 수리 도구입니다. 수백만 명의 사람들이 시스템을 빠르고 원활하며 오류 없이 실행하도록 신뢰합니다. 간단한 사용자 인터페이스와 강력한 검색 엔진을 갖춘 Fortect은 시스템 불안정 및 보안 문제부터 메모리 관리 및 성능 병목 현상에 이르기까지 광범위한 Windows 문제를 빠르게 찾아 수정합니다.
BOOL QueryPerformanceCounter( LARGE_INTEGER * lpPerformanceCount);
매개변수
변수에 대한 포인터는 숫자 성능 카운터에서 모든 현재 값을 가져옵니다.
반환된 값
대부분의 기능이 작동하지 않으면 반환 값은 의심할 여지 없이 0%입니다. 매우 좋은 오류 발생에 대한 자세한 정보를 얻으려면 GetLastError 를 참조하십시오. Windows XP 이상을 실행하는 시스템에서 함수는 항상 함께 성공하므로 0을 반환하지 않을 것입니다.
이 훌륭한 기능과 사용 방법에 대한 자세한 내용은 개요 타임스탬프 기록 을 참조하십시오.
예
// QueryPerformanceCounter.Throws에서 현재 틱 수를 가져옵니다. 떨어져있는// QueryPerformanceCounter 호출이 실패한 경우의 차이입니다.정적 내장 int64_t GetTicks() LARGE_INTEGER가 작동합니다. if(! QueryPerformanceCounter(& 틱)) winrt :: throw_last_error(); 틱 반환.QuadPart;
요구 사항
<테이블 가독성 데이터 테이블은 "1">을 의미합니다.<머리>
<본체>
표>
참조
찾고 있는 구체적인 답변이 아닌가요? Windows C ++ 타이머로 표시된 나머지 질문을 찾아보고 자신의 질문을 하십시오.
#include 이중 PCFreq는 0.0과 같습니다.__int64 카운터 시작 = 0;무효 StartCounter() LARGE_INTEGER 리; (! QueryPerformanceFrequency (& li)) 수수료 << 실패! notT "; "쿼리 실행 빈도 PCFreq = double(li.QuadPart) / 1000.0; QueryPerformanceCounter(& li); CounterStart는 li.QuadPart의 버전입니다.더블 GetCounter() 이씨; large_integer QueryPerformanceCounter(& li); 다중 반환(li.QuadPart-CounterStart) / PCFreq;정수 메인() 시작 카운터(); 수면(1000); 비용 << << "n"; getcounter()는 0을 반환합니다.
이 프로그램은 확실히 1000에 가까운 숫자를 반환해야 합니다(Windows 최대 절전 모드에서는 아직 완료되지 않았지만 999로 끝나야 함).
StartCounter ()
작업은 CounterStart
측면을 통해 이 서비스가 가지고 있는 틱 수를 등록합니다. GetCounter()
함수는 startcounter()
에 대한 마지막 호출 이후 밀리초부터 연결된 숫자를 double로 반환합니다. 즉, GetCounter()
는 0.001에서 우선하며, 결과적으로 StartCounter()
의 시간은 약 1마이크로초가 되었습니다.
이(가) 호출되었습니다.
개인이 타이머가 초를 사용하도록 하려면 타이머를 변경한 다음
PCFreq = 더블(왼쪽 QuadPart) /1000.0;
PCFreq = 이중(왼쪽 QuadPart);
PCFreq는 double(li.QuadPart) /1000000.0을 의미합니다.
587
작년 11월 8일 오후 11시 25분에 답변했습니다.
와 같습니다.
2.248 33개의 금 배지 1717 은색 배지 1616 청동 배지
/ ** 초기화 시 시간 시계 사용 * /#define TIMER_INIT n LARGE_INTEGER 빈도; n LARGE_INTEGER t1, t2; n 두 번 포함됨; n QueryPerformanceFrequency(& 빈도);/ ** 성능 타이머 시작 에 사용 1 . /#define TIMER_START QueryPerformanceCounter (& t1);/ ** 이 유형의 매개변수를 사용하여 공연을 잠시 멈추고 주어진 스트림에서 결과를 보여줍니다. c TIMER_STOP_VERBOSE보다 덜 장황함 * /#TIMER_STOP 정의 n 쿼리 성능 카운터(& t2); n elapsedTime = (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n std :: wcout << elapsedTime << L "sec" << endl;
<사전> <코드> TIMER_INIT TIMER_START 수면(1000); TIMER_STOP TIMER_START 수면 (1234); TIMER_STOP
7 0.00003초1.23407초.
를 의미합니다.
933 88 은색 배지 갈색 배지 2020
2013년 4월 10일 13:04에 답변됨
Windows용이라고 가정하면(따라서 질문을 그렇게 표시해야 하는 경우!) 이 MSDN의 소스 코드에서 간단하고 편리한 C ++ HRTimer
등급을 찾을 수 있습니다. 시트. 이것은 여러분의 필요에 매우 근접한 작업을 수행하는 데 필요한 집합 호출을 지원합니다.
비 Windows 플랫폼에서는 QueryPerformanceCounter 목적이 없으므로 솔루션이 직접적으로 실용적이지 않습니다. 그러나 위에서 언급한 It hrtimer
를 좋아하는 클래스에서 이를 다시 캡슐화하면 의심할 여지 없이 가장 인기 있고 유능한 플랫폼(아마도 점프 스타트 또는 다른 것을 통해!).
11:28 오후 11:28에 09 11월 15일에 응답
를 의미합니다.
775k
이 질문에 대한 시간을 절약하기 위해 예제 NDIS 드라이버를 추가하겠습니다. 일반적으로 잘 알려진 것처럼 KeQuerySystemTime(NdisGetCurrentSystemTime에서 시뮬레이션됨)은 밀리초 미만의 절대 해상도를 가지며 결국 패킷이나 미래의 IRP와 같은 일부 고급 네트워크에는 더 만족스러운 타임스탬프가 필요할 수 있습니다.
LONG_INTEGER 데이터, 빈도;랑롱 차이;데이터 = KeQueryPerformanceCounter ((LARGE_INTEGER *) 및 빈도)diff는 data.QuadPart / (Frequency.QuadPart / rr 제수)를 의미합니다.
1월 21일 14시 14시 12분에 답변됨
2,686
지금 이 간단한 다운로드로 컴퓨터 성능을 높이십시오. 년