Behöver en delay mellan varven i en loop || C++ Windows Forms

Permalänk

Behöver en delay mellan varven i en loop || C++ Windows Forms

Som titeln säger behöver jag en fördröjning mellan varven i en loop. Har testat alla möjliga funktioner för att fördröja men fördröjningarna bara adderas och körs alla samtidigt. I loopen uppdaterar jag:

pictureBox->Visible = true;

Finns det någon funktion eller egenskap hos en picturebox som uppdaterar den eller vad tror ni problemet ligger i?
Har testat:

pictureBox->Invalidate();

Men problemet kvarstår.

Random^ rnd = gcnew Random; for ( int i = 0; i < level + 1; i++ ) { slump = rnd->Next(1, 17); switch (slump) { case 1: pbxKort1->Visible = true; pbxKort2->Invalidate(); paus(); break; case 2: pbxKort2->Visible = true; pbxKort2->Invalidate(); paus(); break; case 3: pbxKort3->Visible = true; pbxKort2->Invalidate(); paus(); break; case 4: pbxKort4->Visible = true; pbxKort2->Invalidate(); paus(); break; case 5: pbxKort5->Visible = true; pbxKort2->Invalidate(); paus(); break; case 6: pbxKort6->Visible = true; pbxKort2->Invalidate(); paus(); break; case 7: pbxKort7->Visible = true; pbxKort2->Invalidate(); paus(); break; case 8: pbxKort8->Visible = true; pbxKort2->Invalidate(); paus(); break; case 9: pbxKort9->Visible = true; pbxKort2->Invalidate(); paus(); break; case 10: pbxKort10->Visible = true; pbxKort2->Invalidate(); paus(); break; case 11: pbxKort11->Visible = true; pbxKort2->Invalidate(); paus(); break; case 12: pbxKort12->Visible = true; pbxKort2->Invalidate(); paus(); break; case 13: pbxKort13->Visible = true; pbxKort2->Invalidate(); paus(); break; case 14: pbxKort14->Visible = true; pbxKort2->Invalidate(); paus(); break; case 15: pbxKort15->Visible = true; pbxKort2->Invalidate(); paus(); break; case 16: pbxKort16->Visible = true; pbxKort2->Invalidate(); paus(); break; default: break; } }

Här är även min nuvarnade fördröjnings funktion:

void paus() { clock_t delay = 2 * CLOCKS_PER_SEC; clock_t start = clock(); while (clock() - start < delay) {} }

Tacksam för all hjäjp!
mvh
Frustrerad programmerare

Permalänk
Medlem

@HappyDomba: Är du säker på att du inte kan lägga paus() i slutet (under din switch)?

Finns inte sleep?

Inget pro på C++ men:

#include <Mmsystem.h> //timeGetTime #include <WinBase.h> //Sleep void Stall(unsigned long ms) { unsigned long start = timeGetTime(); unsigned long passed = 0; while (passed < ms) { passed = timeGetTime() - start; Sleep(0); } }

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem

Eller kanske...
void paus()
{
Sleep(2); // delay 2 sec
}
Edit: Kanske 2000 (millisec), 2 linux, 2000 win? minns inte.

Permalänk
Medlem

Jag kan inte heller c++ men Sleep() bör funka.

Dock kommer Sleep() frysa hela programmet om du inte lägger denna loopen i en egen thread.

Sedan kör du
pbxKort2->Invalidate();
i alla dina case
Du vill väl köra pbxKort(1 t.o.m 16)->Invalidate();
och sen visa din nya?

Permalänk
Medlem
Skrivet av HappyDomba:

Som titeln säger behöver jag en fördröjning mellan varven i en loop. Har testat alla möjliga funktioner för att fördröja men fördröjningarna bara adderas och körs alla samtidigt. I loopen uppdaterar jag:

pictureBox->Visible = true;

Finns det någon funktion eller egenskap hos en picturebox som uppdaterar den eller vad tror ni problemet ligger i?
Har testat:

pictureBox->Invalidate();

Men problemet kvarstår.

Random^ rnd = gcnew Random; for ( int i = 0; i < level + 1; i++ ) { slump = rnd->Next(1, 17); switch (slump) { case 1: pbxKort1->Visible = true; pbxKort2->Invalidate(); paus(); break; case 2: pbxKort2->Visible = true; pbxKort2->Invalidate(); paus(); break; case 3: pbxKort3->Visible = true; pbxKort2->Invalidate(); paus(); break; case 4: pbxKort4->Visible = true; pbxKort2->Invalidate(); paus(); break; case 5: pbxKort5->Visible = true; pbxKort2->Invalidate(); paus(); break; case 6: pbxKort6->Visible = true; pbxKort2->Invalidate(); paus(); break; case 7: pbxKort7->Visible = true; pbxKort2->Invalidate(); paus(); break; case 8: pbxKort8->Visible = true; pbxKort2->Invalidate(); paus(); break; case 9: pbxKort9->Visible = true; pbxKort2->Invalidate(); paus(); break; case 10: pbxKort10->Visible = true; pbxKort2->Invalidate(); paus(); break; case 11: pbxKort11->Visible = true; pbxKort2->Invalidate(); paus(); break; case 12: pbxKort12->Visible = true; pbxKort2->Invalidate(); paus(); break; case 13: pbxKort13->Visible = true; pbxKort2->Invalidate(); paus(); break; case 14: pbxKort14->Visible = true; pbxKort2->Invalidate(); paus(); break; case 15: pbxKort15->Visible = true; pbxKort2->Invalidate(); paus(); break; case 16: pbxKort16->Visible = true; pbxKort2->Invalidate(); paus(); break; default: break; } }

Här är även min nuvarnade fördröjnings funktion:

void paus() { clock_t delay = 2 * CLOCKS_PER_SEC; clock_t start = clock(); while (clock() - start < delay) {} }

Tacksam för all hjäjp!
mvh
Frustrerad programmerare

Testa med att köra wait-onload på din pictureboxar så att applikationen inte fortsätter förrän bilden är laddad.

Får man fråga vad du försöker göra? För en snabb läsning säger mig att du vill visa slumpmässig bild men varför så många pictureboxar? Försöker du göra ett whack-a-mole?

Permalänk

@aluser: Jag ska göra ett spela som slumpar till en början 2 kort i en slumpmässig ordning, visar dem med 1 sekunds mellanrum för att sedan slockna igen. Användaren ska sedan klicka på korten i den ordning som dem visades upp. Om man klarar det slumpas 3 kort o.s.v.

WaitOnLoad är väl om man hämtar en bild. Jag har tilldelat alla pictureboxes varsin bild redan. Men det kunde du inte veta

Permalänk

@freddyfresh: Har testat Sleep(1000) men får samma resultat då.

Permalänk

Löste det guys!
Skulle vara:

pictureBox->Refresh();