Wpis z mikrobloga

Pisząc kod w C natrafiłem na ciekawy problem, którego nie za bardzo jestem w stanie zrozumieć.
Kod wewnątrz warunku powinien wykonywać się co najmniej co 40ms. Dzieje się tak tylko, w przypadku gdy mam włączony np. youtube albo facebook (nie w przypadku wykopu). Dodam, że deltat wtedy zawsze wynosi 1. Jeśli przeglądarkę zamknę, zaczynają się dziać NIESTWORZONE rzeczy - deltat potrafi zyskiwać nagłe wartości około 15, a deltah po wykonaniu warunku wynosi około 47ms.

#c #programowanie

#include
#include

long starttime, endtime, elapsed, deltat, Now, lastUpdate;

int deltah = 0;

int main()
{
starttime = clock();

while(1) {
end
time = clock();
elapsed = (endtime - starttime); //Czas od rozpoczęcia programu w milisekundach

Now = elapsed;
deltat = (Now - lastUpdate); //Obliczenie czasu wykonywania się pętli

if(deltat == 0) //Ten kod wymusza, aby dalsza część kodu wykonywała się co najmniej co 1ms
continue;

lastUpdate = Now;

deltah += deltat; //deltah to suma każdego czasu wykonania pętli

if(deltah >= 40) {
printf("%d\n", deltah); //Biorąc pod uwage powyższe operacje, kod powinien się wykonywać co 40ms
deltah = 0;
}
}
return 0;
}
  • 6
  • Odpowiedz
@wykoszonytrawnik:
Jesteś pewien, że twój program nie leci na tym samym wątku (lub rdzeniu w przypadku HT) co proces przeglądarki lub karty z yt, fb czy czym tam jeszcze? FB i YT w porównaniu do wykopu mogą zabierać więcej mocy obliczeniowej, wtedy przeglądarka zabiera więcej czasu procesora i twój kod działa "wolniej".
Po drugie, jak to kompilujesz? Jesteś pewny, że nie leci żadna optymalizacja i dzieje się to co chcesz, aby
  • Odpowiedz
@Hrabia_Serek_von_Hochland: warunek czy deltat wynosi 1 jest opóźnieniem 1ms. Jeśli chodzi o zastosowanie to mam lepszy sposób na rozwiązanie tego problemu, chodzi mi tylko o zrozumienie co się dokładnie tutaj dzieje.

Sprawdzałem na dwóch różnych IDE, na których są dwa różne kompilatory. Sprawa wygląda identycznie. Czy sprawa dotyczy jakichś błędów związanych z funkcją clock()? Pierwszy raz się z tym spotkałem.
  • Odpowiedz
@wykoszonytrawnik:

warunek czy deltat wynosi 1 jest opóźnieniem 1ms.

Skąd wiesz? Mierzyłeś?

Sprawdzałem na dwóch różnych IDE, na których są dwa różne kompilatory.

Może spróbuj to skompilować na gołym gcc z wyłączoną optymalizacją. Tak z ciekawości, to jakie to kompilatory?

Nie używałem sam funkcji clock, jak już coś mierzyłem to w C++ korzystając z .
  • Odpowiedz