Just nu i M3-nätverket
Jump to content

Fördröjning i C#


simkort

Recommended Posts

// 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";

}

}

 

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

 

 

Link to comment
Share on other sites

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 !

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

 

 

Link to comment
Share on other sites

  • 4 months later...

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...