tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
2357
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    trench140 trench140 ist offline Mitglied Silber
    Registriert seit
    Mar 2008
    Beiträge
    76
    Hallo alle miteinander,

    ich habe die undankbare Aufgabe bekommen, eine vorhandene, extremst gefrickelte Software umzuschreiben.

    Aktuell tut sie Folgendes:

    Ein Prozess lauscht auf COM1 (aktuell /dev/ttyUSB0, USB->Serial-Adapter) über den sie bestimmte Signale gesendet bekommt.
    Erhält sie ein bestimmtes Signal, so wird eine Videowiedergabe auf einem Bildschirm gestartet. Nach dem Ende eine Clips wird der nächste gespielt solange, bis durch ein weiteres Signal angezeigt wird, dass die Wiedergabe beendet werden soll.

    Insgesamt können so zwei Monitore angesteuert werden.

    Das funktioniert nun auch alles perfekt, ich soll das ganze nun so ergänzen, dass man die Wiedergabe auch per Tastatur starten und stoppen kann.

    Nachdem ich bei dem Gefrickel fast das k*tzen bekommen habe, habe und nun zumindest implementiert, dass wenn der Prozess im VORDERGRUND läuft bei Tastendruck die Wiedergabe gestartet wird. Ein Beenden ist dann aber leider nicht mehr möglich, da durch die Wiedergabe das Prozess im Hintergrund verschwindet und Tastatureingaben schön ignoriert.

    Das folgende Codefragment erledigt die Abfrage:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    int ifd;
    struct input_event iev;
     
    ifd=open("/dev/input/event2",O_RDONLY);
    read(ifd,&iev,sizeof(iev));
                
    switch(iev.value)
    {
        case KEY_1:
            rc = 2;
            break;
        case KEY_2:
            rc = 0;
            break;
        case KEY_3:
            rc = 3;
            break;
        case KEY_4:
            rc = 1;
            break;
        default:
            rc = -1;
    }

    Davon ab, dass der Check, ob eine Taste gedrückt wurde/ein Signal gesendet wurde in einer While-Schleife durchgeführt wird und man die Taste recht lange drücken muss bis er gerallt hat, dass die Taste gedrückt wird funktioniert es eben nicht, wenn der Prozess im Hintergrund läuft.

    Mein Problem ist nun, dass ich von C/C++ zwar, was die Grundlagen angeht, gute Kenntnisse habe, aber bei spezifischen Themen passen muss. Ich habe mich jetzt einige Stunden bemüht im Internet einen Lösungsansatz zu finden, aber nie etwas gefunden, bei dem es *klick* gemacht hat.

    Ich habe nun einiges über IPC und Pipes gelesen, aber irgendwie weiß ich nicht, ob der Aufwand nötig ist.

    Wenn also jemand eine Idee hat wäre ich wirklich sehr dankbar, denn ohne funktionierende Tastatureingabe, wenn der Prozess im Hintergrund läuft, kann ich das Ganze direkt vergessen.

    Gruß,
    Trench

    P.S.: Sorry, wenn "Prozess" vielleicht nicht stimmt, aber auch mit der ganzenDaemon-/Prozess-/Fork-Geschichte habe ich mich in den letzten Tage zum ersten Mal wirklich beschäftigt.
     

  2. #2
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    Hallo,

    ich verstehe dein Problem nicht so ganz. Du sagst es funktioniert nicht. Was funktioniert denn nicht? Ein Abbrechen des Prozesses mit Strg-C? Wenn der Prozess im Hintergrund gestartet wird dann ist das normal das er sich nicht mehr mit Strg-C beenden lässt. Du musst ihm wenn schon das Signal -SIGINT von einem anderen Prozess aus schicken damit er sich beendet.

    Zitat Zitat von trench140
    Davon ab, dass der Check, ob eine Taste gedrückt wurde/ein Signal gesendet wurde in einer While-Schleife durchgeführt wird und man die Taste recht lange drücken muss bis er gerallt hat, dass die Taste gedrückt wird funktioniert es eben nicht, wenn der Prozess im Hintergrund läuft.
    Ich versteh nicht so recht was da nicht funktioniert. Funktioniert es generell nicht? Oder äußert sich das "nicht funktionieren" dadurch das er es "nicht rallt" das eine Taste gedrückt wird? Evtl. kannst du dein Anliegen nochmal genauer formulieren.

    Gruß,
    RedWing
     
    "I'm not deaf, I'm ignoring you"
    ----

  3. #3
    zaphod0815 zaphod0815 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    1
    Hallo trench140,

    stehe jetzt vor einem verdammt ähnlichen Problem, lausche auch auf der seriellen und muß bei Bedarf auch etwas darüber senden, Programm läuft auch im Hintergrund. Hast Du dann noch eine Lösung gefunden gehabt ?

    Viele Grüße,

    zaphod0815
     

Ähnliche Themen

  1. Tastatureingabe
    Von oyla12 im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 24.05.07, 22:55
  2. Hintergrundprozess
    Von notebook20000 im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 14.03.07, 09:28
  3. Hintergrundprozess mit PHP starten
    Von notebook20000 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 13.03.07, 16:59
  4. Antworten: 0
    Letzter Beitrag: 23.01.07, 22:37
  5. Hintergrundprozess mit Struts/BEA8
    Von mkreuzspiegl im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 24.05.05, 09:30