Fragen zu Threads
-
Hallo,
--Frage1:
kann ich threads sagen, dass sie höchstens eine gewisse Zeit schlafen dürfen ??Oder kann ich das Ausführen eines Threads anstoßen ??
... Betriebssystem Sache eigentlich... aber trotzdem..
--Frage 2:
Eine Zweite Frage wäre,ich habe den Main Prozess, in welchem ein Thread Läuft welcher nach und nach einen Queue leert.
Es soll nun eine Funktion geben, welche wartet, bis der Thread die Warteschlange geleert hat....
Wie macht man das denn geschickt.Das Event Wait Handle läßt ja immer einen Thread passieren, und stoppt dann erst den Nächsten.
Ich finde es unschön zweimal nacheinander WaiteOne auf zu rufen, um dann
bei leerer Warteschlange mit Set das Warten zu beenden.Join geht nicht, da der Prozess nicht beendet wird, sondern lediglich die Warteschlange leert.
--Frage 3
Dann kommt auch schon die nächste Frage.
Ist es ineffizient kontinuirlich einen Queue abzutasten um zu schauen ob er ein Element enthält ???
Oder Kann man sowas wie einen Interrupt gesteuerten Queue machen, welcher den Thread laufen läßt, sobald die Queue ein Element hat und wenn er leer ist, den Thread vollständig (ohne abtasten) anhält.Grüße....
-
Wenn du nicht mit Thread.Sleep() arbeitest kannst du ihn wieder anstoßen...
Den Thread solltest du dann mittels Monitor.Wait schlafen legen.
// viel thread quelltext lock(_lockObject) { Monitor.Wait(_lockObject, Pausenzeit); }
Anstoßen könntest du ihn dann mittels Monitor.Pulse.
lock(_lockObject) { Monitor.Pulse(_lockObject); }
-
Zu Frage 1:
Einen Thread kann man nur mindestens eine gewisse Zeit schlafen legen. Windows ist kein Echtzeit-Betriebsystem und lässt daher so genaue Operationen nicht zu.
Wie man einen Thread anstösst, hat dir ja inflames2k gezeigt. Ansonsten kann man dies auch mit den Event Wait Handles machen.Zu Frage 2:
Ich begreif dein Problem nicht. Wieso sollte dies unschön sein? Genau dafür ist so ein Wait Handle gemacht. Mehrere Threads rufenWaitOne
auf und warten, bis ein anderer Threads ihnen die Freigabe erteilt, dass sie weiter arbeiten dürfen.Zu Frage 3:
Schau dir wieder die Event Wait Handles an. Der Arbeitsthread wartet, bis jemand ihm signalisiert, dass Arbeit ansteht.Grüssli
-
Okay, danke.....
Hat geholfen.Grüße zurück
P.s. in die Schweiz in der nähe von Basel wegem Grüßli ???
-
AlexanderKiebler schrieb:
P.s. in die Schweiz in der nähe von Basel wegem Grüßli ???
Schweiz stimmt, nähe Basel zumindest früher. Wie kommst du jetzt darauf?
Grüssli
-
Habe dort mal gearbeitet und das Grüßli ist mir als baslerisch in Erinnerung geblieben... weiß aber nicht ob das so genau stimmt mit dem Dialekt und nähe Basel war wohl eher zufallsmatch...
Die Schweiz ist jetzt ja nicht all zu groß
-
Ich denke fast alle Fragen beantwortet dieser Artikel sehr genau.
http://www.codeplanet.eu/tutorials/csharp/64-multithreading-in-csharp.html