[gelöst] Eine längere Action im cThread ausführen

  • Hi,


    ich habe mal eine (ganz einfache triviale) allgemeine Frage zur Plugin-Programmierung: Wie kann ich aus einem cThread die Arbeit fortsetzen?


    Ich möchte beim Aufruf von "MainMenuAction" eine längere Action (Socket connection zu einem anderen host) ausführen. Das werde ich in einem cThread machen, denn aus der "MainMenuAction" Methode soll ja sofort zurückgekehrt werden. Beim Starten des Threads werde ich den Anwender auf dem Menu informieren (im cOsdMenu beim MainMenuAction Aufruf).


    Wenn jetzt der thread beendet ist (ich habe den host gefunden usw.), wie kann ich dann die Arbeit fortsetzen, d.h. etwas auf dem Screen ausgeben um den Anwender zu informieren. Das Plugin wird ja nicht immer aufgerufen und wenn der thread beendet wird kann ich doch nicht einfach was machen (wurde ja nicht vom main aufgerufen).


    Ist sicherlich trivial, aber ich kann nicht weiter.


    Viele Grüße
    dietrich

  • Du kannst die gesamte Ausgabe-Arbeit in einen Thread packen und die Netzwerkverarbeitung in einen zweiten. Über Semaphoren sagst du dem anderen Thread, dass die Netzwerksuche abgeschlossen ist.


    Auf jedenfall würde ich empfehlen, umfangreiche Ausgaben in einem sepraten Thread ausführen zu lassen. Dadurch wird der restliche VDR nicht blockiert.


    cRemote::CallPlugin erzeugt doch meiner Meinung nach eine Call-Schleife, oder irre ich? Macht also nur sinn, wenn man sich nicht auf das eigene Plugin beziehen will, sondern ein anderes aufruft.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Hi,


    Zitat

    Originally posted by methodus
    cRemote::CallPlugin erzeugt doch meiner Meinung nach eine Call-Schleife, oder irre ich? Macht also nur sinn, wenn man sich nicht auf das eigene Plugin beziehen will, sondern ein anderes aufruft.


    Naja, abhängig von einem 'Zustand' kann ich doch im eigenen plugin dann dies oder jenes Menu oder oder oder aufrufen.

  • Hi,


    vielen Dank für die Antworten.


    Zitat

    Original von egal
    Naja, abhängig von einem 'Zustand' kann ich doch im eigenen plugin dann dies oder jenes Menu oder oder oder aufrufen.


    Ist das so? Was bedeutet 'Zustand'? Den kann ich mir doch nicht aussuchen.
    Wenn der Thread meine Arbeit getan hat, kann ich mit dem Aufruf cRemote::CallPlugin("mypluginname") sehr gut leben.


    Nur wie ist es mit der Aussage von methodus:


    Zitat

    Original von methodus
    cRemote::CallPlugin erzeugt doch meiner Meinung nach eine Call-Schleife, oder irre ich? Macht also nur sinn, wenn man sich nicht auf das eigene Plugin beziehen will, sondern ein anderes aufruft.


    Kann jemand zu der evtl. auftretenden Call-Schleife etwas sagen? Denn das wäre ja tötlich.


    Und noch eine Frage: Welche Methode vom Plugin wird aufgerufen, wenn ich mich vom thread mit cRemote::CallPlugin("mypluginname") aufrufe?


    dietrich

  • Hi,


    es wird immer cPlugin::MainMenuAction() aufgerufen;
    'Zustand' meint Speicherung des plugin-Status z.B. einer Variablen, welche bei Aufruf von MainMenuAction() entspr. ausgewertet wird.


    Beispiel radio-plugin:
    hier läuft immer ein Hintergrund-Thread, welcher bei Bedarf automatisch entweder das seperate Radiotext-OSD oder das Rass-Hinweis-OSD oder als 3. Möglichkeit das RadiotextPlus-OSD startet.

Jetzt mitmachen!

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