X11 Schleife



  • Hallo,

    ich habe ein Linuxprogramm prj mit vorgegebenen Code:

    Motif->work_id = XtAppAddWorkProc(appcontext, (XtWorkProc)PerFrame, 0);
    while (!GlobalStruct->ExitApp) {
       XtAppNextEvent (appcontext, &event);
       XtDispatchEvent (&event);
       handleInputProc(&event);
    }
    

    Die Schleife laeuft so lange, bis GlobalStruct->ExitApp auf 1 gesetzt wird (dies passiert unter gewissen Bedigungen in der Funktion "PerFrame").
    Das Problem ist nun: Das Programm wird per Shellskript in einer Schleife aufgerufen (also ohne jegliche Userinteraktion) und das Programm beendet sich nicht mehr. Der Programmfluss ist folgendermassen: Er geht in die Schleife, betritt XtAppNextEvent und jetzt wird ununterbrochen PerFrame aufgerufen. ExitApp ist jetzt auf 1, aber da ja XtAppNextEvent nicht zurueckkehrt, bleibt er in der Schleife.

    So wie ich das sehe ist der Grund dafuer, dass XtAppNextEvent nachschaut, ob ein Event in der Queue ist. WENN ein Event in der Queue ist, dann fuellt XtAppNextEvent die Eventstruktur (2. Parameter) und kehrt zurueck. Aber wenn die Queue leer ist (wie wohl bei mir, da der Benutzer ja keine Eingaben macht), dann ruft XtAppNextEvent permanent PerFrame auf (quasi die IdleFunktion).

    Wie kann ich das fixen? Vllt irgendwie ein Event adden, so dass XtAppNextEvent zurueckkehrt? Habe nur leider keine Funktion a la XtAddEvent() oder so gefunden.



  • Mit der XTEST-Extension kannst du X11 Events erzeugen. Vielleicht hilft dir das weiter. Im Notfall kannst du natürlich auch SIGTERM oä. an das Programm schicken.


Anmelden zum Antworten