[C/C++] while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von °EraZoR°, 7. Mai 2012 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 7. Mai 2012
    while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

    Moin,

    ich habe eine Schleife die eben auf eine Bedingung wartet, die hier erstmal keine Rolle spielt..
    Allerdings soll die Schleife bzw. das ganze Programm auch nach einer gewissen Zeit (in Sekunden, per Parameter festgelegt) beendet werden, falls die Bedingung nicht erfüllt vorher wird...

    Code:
    #define SLEEP_TIME 50000 // 0.05 Sekunden in mikrosekunden
    
    ...
     
     int i = 0, maxRetries = 100;
     while(1 /* egal */) {
     if(i == maxRetries) // Nach 100 Versuchen (ca. 5 Sekunden) abbrechen
     return 1;
     i++;
     usleep(SLEEP_TIME);
     }
    
    So das funktioniert auch soweit..
    Bloß im Moment ist die Wartezeit ja fest im Programm und ich möchte gerne, dass der User über einen Parameter die Wartezeit bestimmen kann..
    Sprich ich muss die maxRetries anhand der festen Wartezeit pro Durchlauf (SLEEP_TIME) ausrechnen..

    Würde in der Theorie so aussehen:
    Code:
    int parameter = atoi(argv[1]);
    int maxRetries = parameter/(SLEEP_TIME/1000000);
    Allerdings kommt bei der Berechnung 50.000/1.000.000 immer Null raus und dadurch auch zum Teilen durch 0..

    Das wird wohl irgendwas mit den Dateitypen zu tun haben.. Da bin ich allerdings nicht so fit drin..

    Hoffe mir ist noch zu helfen


    MfG
    °EraZoR°
     
  2. 7. Mai 2012
    AW: while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

    Der Integer-Datentyp ist speichert ganze Zahlen. Bei deiner Berechnung kommt verständlicherweise keine ganze Zahl als Ergebnis raus. Da der ganzzahlige Anteil 0 ist, wird das Ergebnis 0.

    Du kannst stattdessen Float bzw. Double benutzten. Den Zahlenliteral 1000000 solltest du dann natürlich auch als Float- bzw. Double-Literal schreiben (1000000f bzw. 1000000.0 wenn mich nicht alles täuscht).
     
  3. 7. Mai 2012
    AW: while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

    Ja gut das ist mir soweit klar...
    allerdings teile ich die Integer Usereingabe ja wieder durch die Kommazahl..
    und da es ja keine halben Schleifendurchläufe gibt, kann das Endergebnis ja ruhig nen Integer sein...

    Habs auch schon mit Typecasts versucht, aber selbst wenn ich nur 50000/1000000 rechne kommt da null raus wenn ich nen float nehme...

    das ist es was mich stutzig macht
     
  4. 7. Mai 2012
    AW: while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

    50000 und 1000000 sind Integer-Literale. Daher ist das Ergebnis auch ein Integer. Versuchs mit 50000.0/1000000.0 und es sollte das richtige Ergebnis rauskommen.

    (Ich hoffe das stimmt alles so, ist lange her, dass ich C++ geschrieben habe.)
     
    1 Person gefällt das.
  5. 7. Mai 2012
    AW: while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

    Ich hoffe ich hab dich richtig verstanden das du das noch nicht versucht hast. Verschieb mal die Int Variable der User Eingabe, in eine Float Variable und dann teile.
     
    1 Person gefällt das.
  6. 7. Mai 2012
    AW: while - Anzahl der Durchläufe mit Sleep in Mikrosekunden berechnen

    Meine Güte ist das stressig..
    Jetzt läufts.. Mit etlichen Type-Casts..

    Code:
    #define SLEEP_TIME 50000
    int abortTime = 5;
    
    printf("%d", (int)((float)(abortTime)/((float)SLEEP_TIME/1000000.0))); // 100
    
    Danke
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.