Permalänk
Medlem

C++ GetTickCount hjälp

Tjena hallå!

Jag är ny inom programmering och behöver lite hjälp.
Har en uppgift att göra som är ett så kallat "reaktionsspel" där användaren ska klicka på valfri tangent när texten "NU!" kommer fram som jag har valt att komma fram när som helst inom 3-10 sekunder.

Det jag behöver hjälp med är att veta hur jag ska skriva koden så att den räknar tiden i millisekunder från det jag klickar på valfri tangent.
Har googlat och googlat men vet inte alls hur jag ska skriva det. Jag vet att det är GetTickCount() som kommer att behövas, men som sagt jag vet inte hur jag ska skriva det.

Följande kod jag har har jag skrivit i sekunder, men jag behöver få det i millisekunder som sagt. Är medveten om att en del i koden behöver ändras.

Är väldigt slut i huvudet för stunden och det är säkert det mest simpla kodningen som behövs, men jag kommer inte fram till något just nu.

Så ber er här på SC om hjälp.

Tacksam för svar!

*int main()
{
clock_t startTime, endTime;
float seconds;
srand(time(NULL));
cout << "Var beredd! \n";
Sleep(rand() % 7000 + 3000);
cout << "NU! \n";
startTime = clock();
system("PAUSE>nul");
endTime = clock();
seconds = (float)(endTime-startTime) / CLOCKS_PER_SEC;
cout << "Din reaktionstid är " << seconds << " sekunder.\n";

cin.get();
cin.get();

return 0;
}*

Permalänk
Hedersmedlem

Vad är det alltså som inte fungerar?

Permalänk
Medlem

@Elgot: Allting fungerar som det skall, det är bara att jag vill veta hur jag får det till millisekunder istället för sekunder som jag har det kodat nu. Jag skall alltså inte ha kvar det i sekunder, utan enbart i millisekunder.

Permalänk
Hedersmedlem
Skrivet av robzint:

@Elgot: Allting fungerar som det skall, det är bara att jag vill veta hur jag får det till millisekunder istället för sekunder som jag har det kodat nu. Jag skall alltså inte ha kvar det i sekunder, utan enbart i millisekunder.

Är det bara utskriften du menar (i så fall är det nog enklast att skriva ut seconds*1000 istället för seconds) eller vill du av någon anledning undvika att använda clock()?

Permalänk
Medlem

@Elgot: Ja bara utskriften. Alltså, i min uppgift står det att jag kan ta hjälp utav GetTickCount. Så det är den koden jag är ute efter.

Det ska se ut såhär när det är klart.

http://imgur.com/VwwYgoR

Permalänk
Hedersmedlem
Skrivet av robzint:

@Elgot: Ja bara utskriften. Alltså, i min uppgift står det att jag kan ta hjälp utav GetTickCount. Så det är den koden jag är ute efter.

Det ska se ut såhär när det är klart.

http://imgur.com/VwwYgoR

Då föreslår jag som sagt att du bara multiplicerar med 1000. En fördel med att inte använda GetTickCount är att det kommer att fungera även på andra plattformar än windows.

Permalänk
Medlem

@Elgot: Jag vet inte vad jag gör för fel, men seconds*1000 fungerar inte för mig.

Och angående att det enbart fungerar på windows plattformar med GetTickCount gör ingenting då det enbart ska lämnas in och testas av läraren som då kör på windows.

Jag pluggar på distans och sista inlämningsdagen är 23.59 imorgon på fronter. Det står ingenting i böckerna om den informationen jag behöver med GetTickCount, utan enbart att jag kan googla mig till det, vilket jag tydligen inte lyckas med.

Permalänk
Hedersmedlem
Skrivet av robzint:

@Elgot: Jag vet inte vad jag gör för fel, men seconds*1000 fungerar inte för mig.

Vad händer?
Motsvarande med GetTickCount skulle vara
DWORD startTime, endTime;
samt
startTime = GetTickCount();
och
stopTime = GetTickCount();

CLOCKS_PER_SEC måste också bytas ut mot någon annan konstant.

Permalänk
Medlem

@Elgot: Det här är vad som hände om jag tog seconds*1000 istället för seconds.

http://imgur.com/ebHIT9g

Sedan testade jag göra som du skrev nyss med GetTickCount och jag bytte ut CLOCKS_PER_SEC till CLOCKS_PER_SEC/1000.

Jag vet inte om det är rätt så heller, men när jag testar och köra programmet så får jag fortfarande fram svaret i decimal form vilket jag inte vill ha.

Permalänk
Hedersmedlem
Skrivet av robzint:

@Elgot: Det här är vad som hände om jag tog seconds*1000 istället för seconds.

Det räcker med att ändra just när man skall visa tiden, det vill säga:

cout << "Din reaktionstid är " << 1000*seconds << " millisekunder.\n";

Permalänk
Medlem

@Elgot: Ja det fungerade på det sättet du skrev. Men sen att jag fortfarande får mina svar i decimalform, är det pga att jag använder mig utav float? Som nu fick jag till svars att min reaktionstid är 0.983 sekunder. Jag vill ha det i heltal, 983.

Har testat mig utav både long och int, men det fungerar heller inte. Vad är det jag har missat?

Permalänk
Hedersmedlem
Skrivet av robzint:

@Elgot: Ja det fungerade på det sättet du skrev. Men sen att jag fortfarande får mina svar i decimalform, är det pga att jag använder mig utav float? Som nu fick jag till svars att min reaktionstid är 0.983 sekunder. Jag vill ha det i heltal, 983.

Fast fick du inte 0.983 (eller motsvarande) förut också? I så fall verkar det inte fungera. Händer det något om du byter till
1000000*seconds

Kompilerar programmet som det skall eller misslyckas något med följd att en gammal version körs (visual studio föreslår det ibland)?

Permalänk
Medlem

@Elgot: Ah äntligen!! Det fungerade nu när jag ändrade till 1000000*seconds.

Tackar så otroligt mycket för att du tog dig tid att hjälpa mig!

Permalänk
Hedersmedlem

@robzint
Frågan är vad som har hänt. Hos mig fungerar koden i ditt första inlägg om man bara ändrar till detta:

cout << "Din reaktionstid är " << 1000*seconds << " millisekunder.\n";

Idén med konstanter som CLOCKS_PER_SEC är ju att man inte skall behöva bry sig om hur det ser ut på lägre nivå...

Permalänk
Medlem

@Elgot: Jag testade min original kod igen och ändrade till 1000*seconds utan att ändra något annat. Det fungerade.

Jag har nog skrivit tvärtom, seconds*1000 samt ändrat dem andra seconds till seconds*1000. Var nog det som ställde till allting.

Allting är så rörigt haha, har nästan precis börjat så är helt ny inom detta.

Permalänk
Hedersmedlem
Skrivet av robzint:

@Elgot: Jag testade min original kod igen och ändrade till 1000*seconds utan att ändra något annat. Det fungerade.

Trevligt.

Permalänk
Medlem

@Elgot: Jag tackar ännu en gång för att du tog dig tiden att hjälpa och önskar dig en fortsatt trevlig helg.

Mvh