Ist Thread.Sleep(Int32) schlecht?

07/11/2007 - 20:57 von froorider | Report spam
Hallo NG,

ich habe gerade eine kleine Rüge von meinem Architekten erhalten. Und
zwar darf (oder soll) ich keine .Sleep() - Methode in meinen Threads
verwenden. Das seie "nicht guter Programmierstil". Leider konnte er
mir keine Begründung dazu geben, nur dass ich besser
WaitForSingleObject() benutzen soll.

Laut allen meinen Unterlagen (diverse C# Bücher, Kursunterlagen zum
MCTS und der MSDN) gibt es keine "Weisungen" oder so, dass das
Verwenden von .Sleep() schlimm sein soll.

Welche Erfahrungen habt ihr dazu gemacht?

Übrigens: Mein Workerthread der so schlimm sein soll, macht seine
Arbeit und kann dann zwischen 5 - 30 Sekunden! schlafen. Er muss nicht
per Event "im Schlaf" geweckt werden oder irgendwelche Objekte von
anderen Threads empfangen.

Gruss

Thomas
 

Lesen sie die antworten

#1 Thomas Scheidegger
07/11/2007 - 21:19 | Warnen spam
Hallo Thomas

WaitForSingleObject()



WaitForSingleObject?
Dies wàre doch Win32, und hier fast sicher noch unpassender, via PInvoke besonders.
Eher .NET wie: WaitHandle.Wait* ?



Workerthread ...zwischen 5 - 30 Sekunden! schlafen.



Thread.Sleep scheint mir da durchaus noch akzeptabel.
ggf. wàre eine Lösung per Timer/ThreadPool o.à. auch machbar/'besser'.
[Thread.Sleep hat aber klar Vorteil für Thread-Affine Resourcen]

Aber Achtung:
damit Thread.Sleep zulàssig ist sollte besser explizit das MTA-COM-Apartment
Thread.SetApartmentState
(am besten vor dem Thread.Start)
gesetzt werden,
denn Thread.Sleep bedient die Win32-Message-Queue/Pump (bei STA nötig!) nicht:
http://blogs.msdn.com/cbrumme/archi...51361.aspx


Er muss nicht per Event "im Schlaf" geweckt werden



ok, wie steht es entsprechend bei einem geordneten Programmende?
(Thread.IsBackground ?)



Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen