2009-03-06 3 views
1

Ich habe vor kurzem die CThreadPool-Klasse von ATL entdeckt und war sehr zufrieden mit diesem Fund. Es ist eine nette kleine Klasse, die sich um die Synchronisations-Semantik kümmern wird, mehrere Worker-Threads zu haben, um einige Aufgaben zu erledigen. Die Tasks werden dem CThreadPool-Objekt durch einen externen Prozess zugeführt.Wie kann man wissen, wann die Arbeit mit CThreadPool erledigt ist?

Während es sehr ordentlich und sauber ist, scheint es keine Möglichkeit zu geben, herauszufinden, ob alle Aufgaben erledigt sind. Was ist der beste Weg, das zu tun?

Zum Beispiel sagen, ich muss 10 schwere Rechenaufgaben zu tun und dann weitermachen, etwas anderes zu tun. Ich kann nicht weitermachen, bis ich weiß, dass die Aufgaben abgeschlossen sind.

Also ich einen CThreadPool mit 10 Threads erstellen, legen Sie die Aufgaben in die Warteschlange und sie gehen zu den Threads. Wie würde ich wissen, wann die Aufgaben abgeschlossen sind?

Boaz

Antwort

1

Ich denke, dass Sie Ihre Arbeiter Objekt Execute() Methode irgendeine Form von IPC verwenden müssen feststellen, dass der ‚Haupt‘ Thread überwachen kann. So etwas wie die Execute() Methode Aufruf ReleaseSemaphore() auf einem Semaphor, dass der Haupt-Thread warten kann und zählen, wie oft die Wartezeit abgeschlossen ist. Oder die Threadpool-Worker können eine Nachricht, die angibt, dass sie mit einem Arbeitselement ausgeführt wurde, an eine Nachrichtenwarteschlange senden, von der der Hauptthread Nachrichten erhält.

1

Die sauberste Art, auf eine abgeschlossene Aufgabe zu warten, besteht darin, eine event zu erstellen und anschließend auf den Worker-Thread zu warten, indem Sie WaitForSingleObject aufrufen.

Verwandte Themen