Cross Invoke von Threads im VDR?

  • Hallo,


    Wie stelle ich sicher das ein Kommando/Befehl/Code im Hauptthread des Plugins ausgeführt wird? In C# / Winforms muss ja ein Update des UI Elementes auch im UI Thread durchgeführt werden. Gibt es so etwas ähnliches schon im VDR Core?
    Ich muss nämlich ein neues cControl aus dem MainThread des Plugins / VDR starten, wird es aus einem anderem Thread gestartet klappt das nicht.


    Hatte mir überlegt eine Liste mit Funktionspointern / Funktoren, Lambdas gibt es ja erst in C++11, die dann im Hauptthread abgearbeitet werden.


    Oder denke ich zu kompliziert?


    Chris

  • Wahrscheinlich denkst du zu kompliziert.
    Ansonsten sieh dir mal plugin.h an und suche nach Thread, dann wirst du die Lösung finden...


    http://projects.vdr-developer.…vdr.git/tree/plugin.h#n44


    Aber fasse dich kurz in dieser Methode, sonst blockierst du den vdr.


    Lars

  • Die MainThreadHook bringt mir so direkt glaube nichts.
    Problem:
    Ich habe einen Webserver in einem extra Thread laufen. Wenn ein bestimmter Request kommt soll ein neuer cControl::Launch aufgerufen werden. Das klappt aber nicht aus dem Webserver Thread. Aus dem MainTheadHook würde es zwar funktionieren, aber wie komme ich da aus einem anderem Thread ran?
    Aktuell schreibe ich in eine static Variable einem Funktor den ich aus der MainThreadHook aufrufe. Das erscheint mir aber irgendwie unsauber.

  • Baue dir eine message queue oder ähnliches, ist doch ganz normale Kommunikation zwischen Threads.
    Aber eine statische Variable geht auch, ist halt eine sehr kleine queue. Schütze das Setzen und Auslesen aber mit einer mutex.


    Lars

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!