Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

GELÖST: Semaphore

Michael W
2017-09-15
2017-09-19
  • Michael W - 2017-09-15

    Hallo zusammen,
    könnte mir jemand mal generell bzw. am besten mit BeispielCode das Thema Semaphore näher bringen. Ich habe das Prob, dass ich von 2 Tasken aus auf eine Queue zugreiefn muss und zwar von der einen Task lesend und von der anderen Task schreibend.
    Danke im Voraus.

    Kurzes Update:
    Ich verwende die Lib SysSem. Der Ablauf sieht folgendermassen aus:

    Ích habe ein GVL.Semaphore den ich mittels Create erstelle, dann über Try und Enter diesen Belege und mit Leave den Smeaphore wieder freigebe. In der zweiten Task wird mir dieser aber noch als Belegt ( Rückgabewert von ...Try = 1 ) markiert, obwohl ich den Semaphore über ....Leave freigegeben habe. Oder ...Muss ich diesen Semaphore löschen und den Semaphore bei der nächsten Aktion wieder über Create neu erstellen ???

    Gruß
    Michael

     
  • Thomas - 2017-09-15

    Moin,
    ein paar Dinge sind zubeachten:

    SysSemTry: Wenn es möglich ist die Sektion zu öffnen, erfolgt dies auch direkt.
    Der Unterschied zu SysSemEnter liegt somit darin, das wenn es nicht möglich ist der Code weiterausgeführt wird, während SysSemEnter steht.

    Das hat zur Folge, dass wenn Du erst Try und dann Enter ausführst, Du auch zweimal Leave ausführen mußt.

    PS: Stell sicher, dass das Handle gültig ist, sonst Exception

    Beispiel hängt an.

    Viel Erfolg

    SysSem.project [107.06 KiB]

     
  • Michael W - 2017-09-19

    Hallo ThK,
    vielen Dank für deinen Beispielcode. Habe es getestet in meiner Umgebung und es funktioniert.
    Thread kann als gelöst geschlossen werden !

    Gruß
    Michael

     

Log in to post a comment.