Wie kann ich würdevoll beenden eine X11-event-Schleife?

Fast jedem tutorial finde ich sagt mir dies für mein event-Schleife:

XEvent event;

while (true)
{
    XNextEvent(display, &event);

    switch (event.type)
    {
        case Expose:
            printf("Expose\n");
            break;

        default:
            break;
    }
}

Jedoch das anklicken des X zum schließen des Programms Ergebnisse in dieser Meldung.

XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
after 10 requests (10 known processed) with 0 events remaining.

Es ist in der Tat merkwürdig zu mir, dass die Beispiele empfehlen die Verwendung einer unendlichen Schleife. Das klingt nicht natürlich, und meine andere X11-Programme nicht tun. So suchte ich herum. Ich fand heraus, wie capture the window close event.

Atom wmDeleteMessage = XInternAtom(mDisplay, "WM_DELETE_WINDOW", False);
XSetWMProtocols(display, window, &wmDeleteMessage, 1);

XEvent event;
bool running = true;

while (running)
{
    XNextEvent(display, &event);

    switch (event.type)
    {
        case Expose:
            printf("Expose\n");
            break;

        case ClientMessage:
            if (event.xclient.data.l[0] == wmDeleteMessage)
                running = false;
            break;

        default:
            break;
    }
}

Funktioniert. Es beendet wird, ohne Fehler. ... Aber ich weigere mich zu glauben das ist der normale Weg, Dinge zu tun. Ich meine, ist dies der einzige Weg, um richtig zu beenden, eine X11 app? Es scheint wie eine Menge Arbeit, nur um zu erfassen, das close-Ereignis. Wie mache ich einen "richtigen" Ereignis-Schleife? Warum ist das close-Ereignis so tief vergraben? Was bin ich?

Wenn Sie denken, dass "eine Menge Arbeit", warten, bis Sie zu dem Punkt, zu versuchen, etwas nützliches zu tun in X... 🙂
Nun, es ist nicht so sehr die "Arbeit" ich bin Beanspruchung über. Ich denke, es ist mehr nur: warum ist das so bestimmte Funktion, die so dunkel? Wie kann ich erteilen Sie die exit-Taste, "Standard-Verhalten"?
Das ganze X11-Bibliothek ist dunkel auf der Oberseite dunkel, die mehrere Ebenen tief ist. Es ist wie jemand nahm Dante ' s Inferno und schrieb es als eine C-API. Ich denke, wenn es gemacht wurde, seine Benutzerfreundlichkeit noch schlagen wie seine Vorgänger.
Hatte einen Kommentar über die Dante ' s Inferno Witz. Erste mal, dass ich lese, dass Referenz-und der C-API in ein und demselben Satz

InformationsquelleAutor TheBuzzSaw | 2012-05-29

Schreibe einen Kommentar