MainThreadHook(): Wozu wird der heute noch benötigt?

  • In PLUGINS.html steht:

    Ich vermute mal, vor der Verfügbarkeit von Locks musste der MainThreadHook von Plugins verwendet werden, die in einem eigenen Thread laufen und z.B. Zugriff auf die globale Timers Tabelle benötigen.


    Inzwischen sind ja Locks verfügbar, und da stellt sich mir die Frage, was ein Plugin im "context of the main program thread" machen muss.

    Anders gefragt: Könnte ein Plugin alles, was es in MainThreadHook macht, auch einfach in einem eigenen Thread machen? Oder gibt es Situationen, in denen ein Plugin auf den Kontext des "main program thread" angewiesen ist?


    ~Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • MarkusE

    Changed the title of the thread from “MainThreadHook(): Wozu wirdder Heute noch benötigt?” to “MainThreadHook(): Wozu wird der heute noch benötigt?”.
  • Die Frage ist, ob es überhaupt Plugins gibt, die diese Funktion benutzen.

  • Zumindest eines kenne ich: Das markad Plugin nutzt den MainThreadHook um daraus zur prüfen, ob gestartete markad Prozesse noch laufen, oder inzwischen fertig sind. Da dies nichts mit VDR Strukturen zu tun hat, helfen hier auch keine Locks.

  • live verwendet es auch. Es hat aber Nachteile, und wird in bestimmten Situationen nicht aufgerufen. Daher würde ich lieber einen eigenen Thread verwenden.

    Aber: Die live Entwickler haben Kommentare wie

    Quote

    // may only be called from Plugin::MainThreadHook

    hinzugefügt. Leider wird das nicht begründet. Daher würde ich gerne wissen, ob ich diesen Kommentar ignorieren kann (weil durch Locking inzwischen outdated). Oder ob ich mit den Nachteilen von MainThreadHook leben muss, weil die Verwendung eines eigenen Threads unerwünschte Nebenwirkungen haben kann.

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Und welche Infos benötigen die Plugins, so dass sie nicht von einem extra thread laufen können?

  • Kann markad nicht selber feststellen, ob seine Prozesse fertig sind? Wozu braucht es da MainThreadHook()?

    Du fragst mich jetzt Dinge, die Jahre länger im Code drin sind, als ich mich mit markad beschäftigt habe. Und am Plugin habe ich eh fast nichts geändert.


    Wenn ich mir den Code so anschaue, brauche ich Variablen aus dem Plugin (die Prozesstabelle, der gestarteten markad Prozesse). Ich muss die Tabelle ändern können, ohne mit Änderungen aus dem Plugin nach einem Recording() Aufruf (Start oder Ende einer Aufnahme) in Konflikt zu kommen. Und die Prüfung der laufenden Prozesse müsste regelmäßig aufgerufen werden. Den Aufwand, was funktionierendes zu ändern, würde ich mir gerne ersparen.

  • Ich hätte nichts dagegen, das loszuwerden.

    Hmm.. Das web Plugin nutzt den MainThreadHook auch. Ich habe keine andere Möglichkeit gefunden festzustellen, ob der Player des Plugins abgeschaltet werden muss - z.B. durch drücken der Menu-Taste.

    Es wäre ungünstig, komplett auf die Funktionalität zu verzichten.

  • durch cStatus::Replaying evtl?

  • btw: ich denke, dass Markus absolut recht hat, dieser hook kann den kompletten VDR unbrauchbar machen und sollte perspektivisch durch bessere Lösungen erstzt werden...


    -> bald deprecated && Hilfe bei neuen Lösungen durch unser Forum..

  • Hallo,

    Die gefundenen Probleme sollten schon erst mal gelöst werden, bevor man etwas streicht...

    Nur meine Meinung am Rande...

    MfG Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de

  • Wenn mein Verdacht von hier stimmt, geht es bei markad mit einem Einzeiler:

    Beim shutdown request wird eh nochmals geprüft, und dann könnte auch bei mir MainThreadHook entfallen.

  • Setzte die Warnings innerhalb #ifdef <irgendwas> und in plugins.c machst du vor der Stelle einen #undef <irgendwas> und danach wieder einen #define ...

  • Setzte die Warnings innerhalb #ifdef <irgendwas> und in plugins.c machst du vor der Stelle einen #undef <irgendwas> und danach wieder einen #define ...

    Oh mann, auf die einfachsten Dinge kommt man nicht! Danke!

    Für GCC gibt's wohl diesen Workaround:

    Danke, an sowas hatte ich auch zuerst gedacht, aber der Vorschlag von kfb77 ist natürlich noch einfacher und allgemeingültig.


    MarkusE Sag mir bitte bescheid, wenn ich die Funktion deprecaten soll.

  • > MarkusE Sag mir bitte bescheid, wenn ich die Funktion deprecaten soll.


    Das ist jetzt vielleicht doch außerhalb meiner Gehaltsklasse :) .


    Ich bedanke mich für Deine Rückmeldungen in diesem Thread. Meine Frage, ob MainThreadHook vor der Verfügbarkeit von Locks notwendig war, um auf globale Tabellen (z.B. Timers) zuzugreifen, wurde zwar nicht direkt beantwortet. Ich entnehme den Antworten aber, dass MainThreadHook zumindest jetzt nicht mehr notwendig ist.

    • Ich habe es aus live inzwischen ausgebaut, ein entsprechendes Update ist im git. Anmerkung: In live gab es Probleme, weil MainThreadHook während der Ausgabe einer OSD Meldung nicht aufgerufen wird.
    • In tvscraper wird es nicht verwendet
    • In dynamite wird es verwendet, um vor dem ersten Aufruf von MainThreadHook OSD Meldungen zu verhindern. Kann man vermutlich auch anders lösen.

    Also, falls Du entscheidest, es auf deprecated zu setzen, baue ich es auch aus dynamite aus.


    Ob die Nachteile / Probleme mit MainThreadHook so gravierend sind, dass wir allen Plugins auf's Auge drücken wollen, es auszubauen? Kann ich nicht beurteilen, Klaus, das musst Du entscheiden.


    ~ Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Meine Frage, ob MainThreadHook vor der Verfügbarkeit von Locks notwendig war, um auf globale Tabellen (z.B. Timers) zuzugreifen, wurde zwar nicht direkt beantwortet.

    Sorry ;-).


    Ich entnehme den Antworten aber, dass MainThreadHook zumindest jetzt nicht mehr notwendig ist.

    Sollte es zumindest nicht mehr sein.

    Ich mach es dann für die nächste Version mal deprecated, dann sehen wir ja, was passiert. Mehr als eine Warnung ist es ja zunächst nicht.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!