c++ wie clock_t variable in der funktion updaten?

03/28/2015 16:46 Slade100#1
ich weiß nicht wieso dieso code nicht funktioniert :S
wäre super wenn jemand drüber schaut und mir sagen kann wo das problem ist :D

start = clock();
while(1>0)
{
start=clock(); // wieso wird hier nicht mehr die aktuelle zeit auf start gelegt?
}

liegt das an der clock_t variable? :confused:
oder welche möglichkeiten habe ich start zu upzudaten?
eine neue variable nehmen ist für mein programm nicht möglich :D

Danke schonmal :D
03/28/2015 23:31 Mahatma#2
in erster linie wäre interessant was dein code eigentlich machen soll - lässt sich bei deinem beispiel nur sehr schwer erahnen.

hab mal kurz nach der clock function gegooglet und sieht so aus als würde dir die mehr oder weniger die "cpu-zeit", die dein programm bis jz in anspruch genommen hat als rückgabewert liefern.

wenn du die aktuelle uhrzeit ausgeben willst, dann is die clock function somit net wirklich geeignet. such mal nach der time function, mit der wärst du um einiges besser dran ;)
03/29/2015 00:06 Logtetsch#3
[Only registered and activated users can see links. Click Here To Register...]
Mögliche Lösung?
03/29/2015 00:52 Slade100#4
Quote:
Originally Posted by Mahatma View Post
in erster linie wäre interessant was dein code eigentlich machen soll - lässt sich bei deinem beispiel nur sehr schwer erahnen.

hab mal kurz nach der clock function gegooglet und sieht so aus als würde dir die mehr oder weniger die "cpu-zeit", die dein programm bis jz in anspruch genommen hat als rückgabewert liefern.

wenn du die aktuelle uhrzeit ausgeben willst, dann is die clock function somit net wirklich geeignet. such mal nach der time function, mit der wärst du um einiges besser dran ;)
habe hier eine unterfunktion geschrieben

bool TimeForSkill(int s, clock_t st){
int check;
check = (clock() - st) / CLOCKS_PER_SEC;
if (s <= check)
return true;
else return false;
}
in hauptfunktion ist dann sowas hauptfunktion ist dann sowas
if(TimeForSkill( 125 , start) ==1)
{
...
Sleep(1000)
....
Sleep(5000)
}
// hier dann timer wieder zurück stellen, damit wieder von 0 hochgezählt //wird. hierfür halt wieder
start = clock();
habe eine while(1>0) schleife, die mehrere verschiedene funktionen hat,
welche alle paar minuten (variable s für sekunden ) aufgerufen werden, naja und dann solls wieder auf 0 gesetzt werden, dafür wäre die neue zuweisung von start = clock(), naja und da es mehrere funktionen sind, wird jede seine eigene clock_t variable benötigen, da sonst durch die Sleeps in den funktionen, andere funktionen verschlafen werden ^^





Quote:
Originally Posted by Logtetsch View Post
[Only registered and activated users can see links. Click Here To Register...]
Mögliche Lösung?
danke für die antwort, aber das ist nicht wirklich mein problem^^
03/29/2015 01:37 Mahatma#5
wie oben schon erwähnt is clock() in diesem fall nicht die richtige funktion für den zweck, weil sie nicht die uhrzeit, sondern die verbrauchte cpu-zeit zurückliefert.
um die richtige funktion für dich zu finden solltest du dich zu allererst einmal fragen welche auflösung/genauigkeit du brauchst. reicht es in sekunden aufzulösen oder gibt es eventuell auch skills die weniger als 1 sec cooldown haben und die du deshalb beispielsweise alle 0,5 sec "ausführen" willst....?

für eine sekunden-auflösung würde sich die time() function anbieten, solltest du eine höhere genauigkeit (millisekunden) brauchen, so kannst du unter windows z.b. GetTickCount() oder unter unix gettimeofday() nehmen.

hab dir kurz mal etwas beispielcode geproggt um das ganze bissl zu veranschaulichen (kann aber net garantieren dass er lauffähig ist, weil ich den nur eben im editor geschrieben hab):

03/29/2015 01:51 Slade100#6
Quote:
Originally Posted by Mahatma View Post
wie oben schon erwähnt is clock() in diesem fall nicht die richtige funktion für den zweck, weil sie nicht die uhrzeit, sondern die verbrauchte cpu-zeit zurückliefert.
um die richtige funktion für dich zu finden solltest du dich zu allererst einmal fragen welche auflösung/genauigkeit du brauchst. reicht es in sekunden aufzulösen oder gibt es eventuell auch skills die weniger als 1 sec cooldown haben und die du deshalb beispielsweise alle 0,5 sec "ausführen" willst....?

für eine sekunden-auflösung würde sich die time() function anbieten, solltest du eine höhere genauigkeit (millisekunden) brauchen, so kannst du unter windows z.b. GetTickCount() oder unter unix gettimeofday() nehmen.

hab dir kurz mal etwas beispielcode geproggt um das ganze bissl zu veranschaulichen (kann aber net garantieren dass er lauffähig ist, weil ich den nur eben im editor geschrieben hab):

erstmal danke für den beispielcode, aber jetzt mal zu meinem, ich versteh nicht ganz wo der unterschied ist wenn ich in meinem fall mit time oder clock arbeite, da ich mit meiner berechnung (clock() - st) / CLOCKS_PER_SEC )) auch die sekunden kriege , ich würds nur gerne verständniss halber wissen, danke nochmal
03/29/2015 03:05 Mahatma#7
Quote:
Originally Posted by erfan100 View Post
erstmal danke für den beispielcode, aber jetzt mal zu meinem, ich versteh nicht ganz wo der unterschied ist wenn ich in meinem fall mit time oder clock arbeite, da ich mit meiner berechnung (clock() - st) / CLOCKS_PER_SEC )) auch die sekunden kriege , ich würds nur gerne verständniss halber wissen, danke nochmal
hab die clock() function ehrlich gesagt selbst noch nie verwendet - hab halt vorhin nen blick auf die funktionsbeschreibung geworfen und dort gelesen dass dir die funktion die "cpu-zeit" zurückgibt die du konsumiert hast - darunter versteh ich die zeit, die dein programm vom scheduler zugeteilt gekriegt hat um aktiv z.b. irgendwelche berechnungen durchzuführen. du kannst die cpu-zeit klarerweise net für irgendwelche timing-zwecke wo es einfach nur um verstrichene zeit geht verwenden. wenn du meinst bzw dir sicher bist, dass dir (clock() - st) / CLOCKS_PER_SEC )) die sekunden seit dem programmstart (oder dergleichen) zurückliefert, dann kanns auch sein dass ich mich irre und/oder die funktionsbeschreibung zu ungenau gelesen hab und dann kannst du die funktion natürlich genauso verwenden.

wenn du dir aber nicht zu hundert prozent sicher bist würde ich aber doch lieber auf GetTickCount() vertrauen, die ist altbewährt und funktioniert mit sicherheit ohne probleme ;)
03/29/2015 03:12 Slade100#8
Quote:
Originally Posted by Mahatma View Post
hab die clock() function ehrlich gesagt selbst noch nie verwendet - hab halt vorhin nen blick auf die funktionsbeschreibung geworfen und dort gelesen dass dir die funktion die "cpu-zeit" zurückgibt die du konsumiert hast - darunter versteh ich die zeit, die dein programm vom scheduler zugeteilt gekriegt hat um aktiv z.b. irgendwelche berechnungen durchzuführen. du kannst die cpu-zeit klarerweise net für irgendwelche timing-zwecke wo es einfach nur um verstrichene zeit geht verwenden. wenn du meinst bzw dir sicher bist, dass dir (clock() - st) / CLOCKS_PER_SEC )) die sekunden seit dem programmstart (oder dergleichen) zurückliefert, dann kanns auch sein dass ich mich irre und/oder die funktionsbeschreibung zu ungenau gelesen hab und dann kannst du die funktion natürlich genauso verwenden.

wenn du dir aber nicht zu hundert prozent sicher bist würde ich aber doch lieber auf GetTickCount() vertrauen, die ist altbewährt und funktioniert mit sicherheit ohne probleme ;)
also das das die sekunden wiedergibt, da mich ich mir tausend prozent sicher :D das problem ist halt nur die neuzuweisung die funzt net :S , aber da gettimecount scheinbar besser funzt, mach ichs jetzt damit , danke sehr ;)