Одобрено: Fortect
На прошлой неделе некоторые из наших потенциальных клиентов столкнулись с ошибкой отмены высокой производительности Win32. Эту проблему могут вызвать несколько факторов. Об этом, наверное, и поговорим ниже.
- 2 минуты на переваривание.
Возвращает текущее значение счетчика производительности, которое представляет вероятность длительного ответа (<1 мкс), при котором этот буфер может быть очень использован для измерения времени.
Синтаксис
Одобрено: Fortect
Fortect — самый популярный и эффективный в мире инструмент для ремонта ПК. Миллионы людей доверяют ему обеспечение быстрой, бесперебойной и безошибочной работы своих систем. Благодаря простому пользовательскому интерфейсу и мощному механизму сканирования Fortect быстро находит и устраняет широкий спектр проблем Windows — от нестабильности системы и проблем с безопасностью до проблем с управлением памятью и производительностью.
а>
BOOL QueryPerformanceCounter ( LARGE_INTEGER 5. lpPerformanceCount);
Параметры
Указатель, позволяющий им перейти к переменной, получает это текущее значение от некоторого числового счетчика производительности.
Возвращаемое значение
Если большинство функций не работают, возвращается значение 0%. Чтобы узнать больше о возникновении ошибки, GetLastError . В системах под управлением Windows XP или новее достижение всегда будет успешным и, следовательно, не вернет ноль.
Чтобы получить дополнительную информацию об этой ценной замечательной функции и о том, как ее использовать, обратите внимание на Запись временных меток высокой четкости .
Примеры
// Получить текущее количество тиков из QueryPerformanceCounter.Throws. прочь// Разница в случае сбоя точного вызова QueryPerformanceCounter.статический встроенный int64_t GetTicks () LARGE_INTEGER работает; если (! QueryPerformanceCounter (& Ticks)) winrt :: throw_last_error (); Тики return.QuadPart;
Требования
По крайней мере, опытный профессиональный покровитель | Windows 2000 [настольные приложения | Приложения UWP] |
Минимальный поддерживаемый сервер | Windows 2000 Server [настольные приложения | Приложения UWP] |
Целевая платформа | Windows |
Заголовок | profileapi.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |
См. также
Не тот конкретный ответ, который вы ищете? Просмотрите оставшиеся вопросы, помеченные таймерами Windows C ++, и задайте свой вопрос.
#include двойной PCFreq = 0,0;__int64 CounterStart означает 0;void StartCounter () LARGE_INTEGER li; если (! QueryPerformanceFrequency (& li)) стоимость << не удалось! notT "; «Частота выполнения запроса PCFreq = double (li.QuadPart) на 1000,0; QueryPerformanceCounter (& li); CounterStart равен li.QuadPart;двойной GetCounter () Ли; large_integer QueryPerformanceCounter (& li); двойной возврат (li.QuadPart-CounterStart) / PCFreq;int main () StartCounter (); Сон (1000); цена . << << " n"; getcounter () дает 0;
Эта программа должна вернуть число до 1000 (однако гибернация Windows еще не завершена, но должно быть 999).
Задание StartCounter ()
регистрирует количество проверок, которые эта служба выполняет в аспекте CounterStart
. Функция GetCounter ()
вернула элементам связанный номер в миллисекундах с момента оставшегося обслуживаемого вызова startcounter ()
как важного двойного значения, т.е. если GetCounter ()
может иметь приоритет на 0,001, поэтому время для получения StartCounter ()
составляет примерно 1 микросекунду.
получить звонок
Если вы хотите, чтобы таймер помогал вам использовать секунды, измените его
PCFreq соответствует двойному (слева QuadPart) /1000.0;
PCFreq равно double (слева QuadPart);
PCFreq означает дважды больше (li.QuadPart) /1000000.0;
587 11 значков для ваших старых часов
отдыхать 15 ноября прошлого года в 23:25.
2.248
- ** Использовать часы при инициализации 4. /#define TIMER_INIT n LARGE_INTEGER частота; n LARGE_INTEGER t1, t2; n прошел дважды; n QueryPerformanceFrequency (& frequency);/ ** Используйте для запуска одного определенного таймера производительности * /#define TIMER_START QueryPerformanceCounter (& t1);/ ** Используйте этот параметр, чтобы остановить минимум производительности и отобразить результат в другом заданном потоке. Менее подробный, чем c TIMER_STOP_VERBOSE * /#define TIMER_STOP n Счетчик производительности запроса (& t2); n elapsedTime = (float) (t2.QuadPart-t1.QuadPart) /frequency.QuadPart; n std :: wcout << elapsedTime << L "сек" << endl;
TIMER_INIT TIMER_START Сон (1000); TIMER_STOP TIMER_START Сон (1234); TIMER_STOP
1 0,00003 сек.1.23407 с.
933
ответ дан 10 апр.2013 г. в 13:04
Предполагая, что вы работаете в Windows (так что если вам действительно нужно так отметить свой вопрос!), вы и ваша семья можете найти простой и удобный класс C ++ HRTimer
в исходном купоне на эта страница MSDN. который поддерживает вызовы set-in-place, необходимые для выполнения чего-то очень близкого к вашим потребностям (было бы удобно использовать метод GetTicks ()
для решения некоторых проблем, особенно для того, чтобы делать именно то, что действительно нужно делать).
На платформах, отличных от Windows, в последнее время нет функции QueryPerformanceCounter, поэтому решение не должно быть непосредственно практическим. Однако, если вы повторно инкапсулируете этот тип в класс, подобный It hrtimer
, указанный выше, будет легче настроить реализацию класса, чтобы учесть достоинства текущих платформ, без сомнения, достаточно уверенно (может быть, через буст или что-то еще!).
ответил 15 ноя 09 около 23:28
775k
Я бы определенно добавил конкретный пример драйвера NDIS, чтобы сэкономить время на этом важном вопросе. Как особенно хорошо известно, KeQuerySystemTime (смоделированный в NdisGetCurrentSystemTime) имеет разрешение в следующие миллисекунды, и в конечном итоге для некоторых технологических сетей, таких как коробки или будущие IRP, может потребоваться более полная временная метка;
данные LONG_INTEGER, частота;LANGLON Diff;данные равны KeQueryPerformanceCounter ((LARGE_INTEGER *) & frequency)diff подразумевает data.QuadPart на (Frequency.QuadPart / $ divisor)
очищен 21 янв, 12 в 14:12
2 686
Повысьте производительность вашего компьютера с помощью этой простой загрузки. г.