(можете пропустить эту часть только объяснение кода ниже. Мои проблемы находятся под блоком кода.)
привет. Я пытаюсь использовать циклы дросселирования, основываясь на том, какую полосу пропускания использует компьютер Linux. я читаю / proc / net / dev раз в секунду и отслеживаю байты, передаваемые в 2 переменных. один - последний раз, когда он был проверен, другой - последний раз. оттуда вычитает последний из последнего, чтобы вычислить, сколько байтов было отправлено за 1 секунду.
оттуда у меня есть переменные max_throttle, throttle, max_speed и sleepp.
Идея состоит в том, чтобы увеличить или уменьшить sleepp в зависимости от используемой полосы пропускания. чем меньше пропускная способность, тем меньше задержка и чем больше, тем дольше.
У меня сейчас проблемы с плавающими и целыми числами. если я устанавливаю все мои переменные в ints, max_throttle становится 0 всегда, независимо от того, что я устанавливаю для других, и даже если я их инициализирую.
также, хотя в моем операторе if говорится: «если sleepp меньше, чем 0, верните его в 0», оно все глубже и глубже проникает в негативы, а затем выравнивается на уровне -540 с использованием 0 пропускной способности.
и if (ii & 0x40) для контроля скорости и использования. в моем приложении не будет спящего режима в течение 1 секунды, поэтому этот код позволяет ограничить изменение sleepp примерно каждые 20-30 итераций. хотя у меня также есть проблема, связанная с тем, что после двухкратных итераций, когда он запускается, он продолжает запускать каждую итерацию после того, как вместо того, чтобы быть истинным только один раз, а затем снова быть истинным после еще 20-30 итераций.
edit :: более простое приведение тестов к моей переменной.
#include <stdio.h>
int main()
{
int max_t, max_s, throttle;
max_s = 400;
throttle = 90;
max_t = max_s * (throttle / 100);
printf("max throttle:%d\n", max_t);
return 0;
}