Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#3

AW: WaitForMultipleObjects "bWaitSome"

  Alt 15. Nov 2011, 20:21
Der WorkerThreadPool hängt in einem Webservice.
Die Jobs kommen daher sporadisch und unkontrollierbar von aussen in die Jobliste.

Nach jedem JobList.Add(aJob) setze ich das Semaphore-Handle um 1 hoch.
Das Semaphore Handle legt ja im Endeffelt nur fest, wie oft WorkerThreads aus dem ThreadPool aufgeweckt werden müssen um alle Jobs abzuarbeiten.

Der, durch ein Semnaphore, aufgeweckte Thread greift sich dann immer den ältesten Job aus der Jobliste (FiFo). In der Zeit wo der Thread auf das Semaphore gewartet hat, können sich viele Zustände im System geändert haben. Das bekommt der Thread während des Wartens ja nicht mit.

Wenn ich nun die Jobs in die Liste schreiben würde, ohne ein Semaphore zu setzen, dann müsste ja wieder ein Thread "rotieren" und stänfig prüfen, ob es neue Jobs gibt und alle Voraussetzungen erfüllt sind um die Jobs abzuarbeiten, um dann Semaphore zu setzen, die dann von Workertheadpool erkannt werden ... Das wäre nicht zielführend. Der Service soll schlafen und erst aktiv werden, wenn es was zu erledigen gibt. Schlafen könnte dieser "ListenüberwachungsThread" dann ja nicht. Wenn ich den auf ein Semaphore warten lassen würde, dann drehe ich mich im Kreis
  Mit Zitat antworten Zitat