Hallo Jungs,
ich versuche mich das erste mal an einer Producer-Consumer-Struktur. Gab bisher nie eine Indikation für mich eine zu machen.

[
attachment=26756]
[
attachment=26774]
[
attachment=26732]
Könnt ihr bitte drüber schauen und mir kurz erklären warum es nicht rund läuft. Also primär ist da das Problem mit der CPU-Auslastung (>50%). Außerdem kommen manchmal Fehler vom Treiber der Karte ... aber naja da muss ich selber im Manuel wühlen.
Gruß dimitri
Habe nur einen kurzen Blick drauf geworfen, zwei Sachen fielen mir auf:
1) In der Verbraucherschleufe befindet sich ein Wait. Da aber diese Schleife von der oberen Schleufe aus mittels der der Funktion "Element aus Queue entfernen" synchronisiert wird, ist so ein zusätzliches Wait kontrapunktiv bis schädlich.
2) Stop funktioniert nicht: Die obere Schleife wird beendet. In der unteren Schleife wartet die Funkton "Element aus Queue entfernen" unendlich lange, bis ein Element kommt. Es kommt aber nichts mehr.
Abhilfe z.B auf etwas brutale Art: Beim Beenden der oberen Schleife die Queue zerstören. Das bekommt die Funktion "Element aus Queue entfernen" in der unteren Schleife mit und gibt einen Fehler aus, mit dem sich die Schleife beenden läßt.
[
attachment=26775]
Oder alternativ: Dafür sorgen, daß bei Betätigen von "Stop" in der oberen Schleife noch eine Meldung gesendet wird.
Vielen Dank! Bin noch etwas unbeholfen mit Queues.
Edit: Habe mich dafür entschieden.
' schrieb:Oder alternativ: Dafür sorgen, daß bei Betätigen von "Stop" in der oberen Schleife noch eine Meldung gesendet wird.
Das Beenden klappt jetzt wirklich viel besser!
Edit2:
Der idle State in der Verbraucher Loop ist total überflüssig. Ich kapier's langsam ...
' schrieb:Edit2:
Der idle State in der Verbraucher Loop ist total überflüssig.
Das Gefühl hatte ich auch. Und damit entfällt auch, den Status mit in die Verbraucherschleife senden zu müssen. Man bräuchte nur noch das reine Signal, der Cluster, bestehend aus den Elementen "Signal" und "Status", wäre nicht mehr notwendig.
' schrieb:Das Gefühl hatte ich auch. Und damit entfällt auch, den Status mit in die Verbraucherschleife senden zu müssen. Man bräuchte nur noch das reine Signal, der Cluster, bestehend aus den Elementen "Signal" und "Status", wäre nicht mehr notwendig.
Ich komme jetzt ganz gut voran. Status habe ich behalten: Init/Work/Stop. Sieht übersichtlich und sauber aus.