Трассировка приведенного ниже кода полностью сломана, а не плавная кривая. Это фрагмент моей программы. Моя частота дискретизации составляет 1 секунду, и я перепробовал все возможные значения дискретизации. Я также пробовал приведенный ниже код, используя только PerfSetULongLongCounterValue() и не используя вызовы Decrement/Increment. Это тоже не помогло. Должен быть способ/настройка сообщить Perfmon, что, если входящее значение равно 100, 200, 300, 500, 300, 200, 100, отрисовывается синусоида. Когда я даю данные синусоидальной волны с интервалом в 1 секунду, я получаю несвязанные линии. Пожалуйста помоги.
PerfSetULongLongCounterValue(abcd, GPerfInstance0[0], TOT_MBW_ID, 0);
ULONGLONG counterValue = 0, oldCounterValue = 0;
SYSTEMTIME sysTime;
while (!_kbhit()) {
counterValue = 30+ (rand() % 10)*100;
if (counterValue > oldCounterValue) {
PerfIncrementULongLongCounterValue(abcd, GPerfInstance0[0], TOT_MBW_ID, llabs(counterValue - oldCounterValue));
} else if (counterValue < oldCounterValue) {
PerfDecrementULongLongCounterValue(abcd, GPerfInstance0[0], TOT_MBW_ID, llabs(counterValue - oldCounterValue));
} else {
PerfSetULongLongCounterValue(abcd, GPerfInstance0[0], TOT_MBW_ID, counterValue);
}
GetSystemTime(&sysTime);
cout << counterValue << ", " << sysTime.wMinute << ":" << sysTime.wSecond << "\n";
oldCounterValue = counterValue;
Sleep(1000);
}
Мне указали на этот образец кода: https://github.com/microsoft/Windows-classic-samples/blob/master/Samples/Win7Samples/winbase/PerfCounters/Basic/CPP/ucs.c Однако это работает отлично когда я попробовал тот же код в своем коде, PerfSetCounterRefValue() выдал ошибку 0x57 INVALID_PARAMETER. Поэтому я отказался от этого. По крайней мере, приведенный выше код работает гораздо лучше и нуждается в одной небольшой настройке. Любая помощь будет принята с благодарностью.