C Anfängerfrage(n)

  • Hallo, ich bin gerade dabei den VDR für mein System etwas anzupassen.
    bzw mein erstes Plugin zu basteln.


    Wie ich schon gepostet hatte, habe ich vorher unter Delphi/Pascal programmiert, und mit C C++ keine oder wenig Erfahrung.


    Ich habe das hier:

    Code
    ....
     pthread_attr_init(&attr);
     pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
     pthread_create(&t1,&attr,(void *(*) (void *))switchtft,NULL);
    ....


    Das Threadevent switchtft wird mit return NULL; beendet.
    Wird somit auch das pthread_ Objekt vom Speicher entfernt ?
    Wenn nicht mülle ich mir auf die Dauer den Heap zu.


    Sicher ist es besser wenn ich das Objekt beim Start des VDR einmal erzeuge, und mit Resume und Suspend zu arbeiten.
    Wie würde dies unter C aussehen ?


    mfg


    PS:
    switchtft schaltet mein TFT aus oder ein, da dort zwei sleep's drin sind hatte es den VDR kurz blockiert wenn die direkt ausgeführt wurde.
    Als extra Thread ist davon nichts mehr festzustellen

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Dein Codefragment enthält kein "new", also hat es nichts mit dem Heap zu tun. Ich nehme an, t1 ist eine lokale Variable am Stack.


    Was hättest du mit Resume und Suspend vor, bzw. welche Vorteile erwartest du davon?

    hdvdr: Linux 2.6.36, vdr 1.7.16, Athlon X2 4850e, 780G, kein VDPAU, xineliboutput-plugin

  • Zitat

    Dein Codefragment enthält kein "new", also hat es nichts mit dem Heap zu tun. Ich nehme an, t1 ist eine lokale Variable am Stack.


    t1 ist so definiert

    Code
    pthread_t t1;


    Mein Code enthält kein new aber ein create

    Code
    pthread_create


    Was dahinter passiert weiß ich nicht.


    Was mach ich damit:
    Jedesmal wenn ein Timeout erreicht wird (Am VDR wird kein Menü etc. aufgerufen) soll das TFT Display ausgeschaltet werden.
    Dazu wird mit pthread_create der Thread erzeugt, dessen eventhandler führt den darin gefindlichen Code aus (Display ist aus).
    Am Ende sollen/müssen die evtl. benötigten ressourcen wieder freigegeben werden.


    Wenn das Display aus ist und eine Taste an der FFB betätigt wird das Display wieder eingeschaltet. Auch hier wird der Thread erzeugt.


    Zitat

    Was hättest du mit Resume und Suspend vor, bzw. welche Vorteile erwartest du davon?


    Ich würde nur beim Start des VDR einmal das Threadobjekt erzeugen, und immer wenn ich ihn brauche mit Resume anstoßen.
    Programmiertechnisch ist es optimaler als jedesmal das Objekt neu zu erzeugen und hinterher wieder zu zerstören.


    Der Code funktioniert so zwar auch, aber ich will ja was lernen...

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

    Einmal editiert, zuletzt von rudirabbit ()

Jetzt mitmachen!

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