Just nu i M3-nätverket
Gå till innehåll

Fördröjning i C#


simkort

Rekommendera Poster

// fråga när är det relevant att använda fördröjning

// som i exemplet här kan man inte uppfatta någon skillnad

// med eller utan Knapp

// när vet man om datorn behöver fördröjning, är programmet

// olika snabbt (i alla delar) i olika datorer

// en snabb maskin kanske inte behöver fördröjning för

// att ladda en programmerad Print Screen och rita ut i

// en pictureBox

 

 

 

 

 

 

 

private void textBox1_TextChanged(object sender, System.EventArgs e)

{

 

}

 

private void button3_Click(object sender, System.EventArgs e)

{

int nSek = 1/500; // 500 dels sekund

 

DateTime end = DateTime.UtcNow.AddSeconds (nSek);

 

while (DateTime.UtcNow < end);

 

textBox1.Text = "Tiden är ute";

}

}

 

 

Länk till kommentar
Dela på andra webbplatser

Dumt sätt att vänta på som tar upp all CPU-kraft som finns. Sätt tråden att vila en stund och kolla sedan om tiden är ute eller det du väntar på har skett:

 

Exempelvis använd

System.Threading.Thread.Sleep(200);

så sover din tråd i 200 ms

Runt denna sats kan du lägga in While. Öka tiden den sover till så stor som är smidigt.

 

Det finns även andra tekniker att hantera detta men denna är enklast.

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Jag förstår inte frågan. Du är väl medveten om att den kod du anger kompileras och körs på servern, inte på besökarens dator.

 

Generellt kan jag säga följande, du bör läsa in dig på skillnaderna mellan synkrona och asynkrona operationer. Alla asynkrona metoder erbjuder möjlighet att ange callback-delegater, som anropas när metoden är klar med sitt arbete.

 

Med asynkron metod menas att din kod fortsätter att exekveras oavsett om metoden har fullföljt sitt arbete. Callback-delegaten är en funktion som du anger som parameter och denna kommer att trädas in i när metoden är klar.

 

Återkom om du vill ha tydligare förklaring.

Länk till kommentar
Dela på andra webbplatser

private void button1_Click(object sender, EventArgs e)

{

 

button1.Text = "Tiden är ute";

 

System.Threading.Thread.Sleep(2000);

 

}

 

// i exemplet här skrivs inte ny text innan det gått 2 sek.

// Min fundering var varför man ska ha sleep när ändå allt fungerar

// ja om man inte vill visa att något ska starta senare(tex.).

//ibland verkar det som knappen utan sleep är för snabb

 

 

Länk till kommentar
Dela på andra webbplatser

Hur gör man för att kolla hur mycket CPU kraft som behövs vid olika delay.

Jag tror att det är samma vid de två exemplen.

Förklara hur sleep är så bra !

Länk till kommentar
Dela på andra webbplatser

Jag tror nog Anjuna var på rätt spår. Mitt tips var lite galet då det ligger i GUI tråden och skräpar.

 

Poppa av en backgroundworker eller liknande som ligger och väntar en stund för att sedan skicka ett mess till GUI att nu var det försent. Titta lite delegetas och dessa vänner. Bättre sätt att göra det på. Kodexempel? Sök på nätet om du inget finner så kanske någon här kan bidra men exempel finns det gott om.

 

Sleep - den innebär att den tråd lägger sig i vila den tiden som är angiven. Vila innebär alltså att den medger att operativet puttar bort den från exekveringskön den tid som processen vill vila.

Att vänta med while-lop utan Sleep innebär att processen kommer köras hela tiden, dvs äta så mycket CPU-tid den bara kan.

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Hur gör man för att kolla hur mycket CPU kraft som behövs vid olika delay.

Jag tror att det är samma vid de två exemplen.

Förklara hur sleep är så bra !

Som Monshi redan förklarat så innebär en loop att tråden fortsätter att exekvera under hela "fördröjningen" och därmed äter processorkraft. Sleep är en asynkron operation som innebär att operativsystemet släpper tråden under det angivna intervallet och under denna tid går alltså ingen processorkraft alls åt till fördröjningen.

 

Sen uppskattar jag inte din attityd i din nystartade tråd. Jag sitter här på min egen tid och har faktiskt ett mycket tidskrävande arbete som inte alltid ger mig möjlighet att följa upp trådar lika ofta som ni skulle vilja. Vill ni har garanterad och snabb hjälp får ni betala för det.

Länk till kommentar
Dela på andra webbplatser

Istället för en background worker så kan du lägga in en Timer på dit formulär. Denna kan sättas upp att "vakna" efter en bestämd tid. Principen är den samma som background workern men kanske lite lättare att förhålla sig till.

 

 

 

/J

 

 

Länk till kommentar
Dela på andra webbplatser

  • 4 months later...

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...