2017-06-13 4 views
1

Ich arbeite gerade an einem Projekt, bei dem ich gelegentlich X11-Funktionen direkt nutzen muss. Da ich aus einer Windows-Welt komme, in der alles ausführlich dokumentiert ist, habe ich einige Probleme, die relativ spärliche Linux-Dokumentation zu finden und zu bearbeiten.X11 Ressourcenbefreiung (insbesondere Bildschirmobjekte)

Zum Beispiel, wenn ich den Code:

Display* disp; 
if (!(disp = XOpenDisplay(NULL))) { 
    return; 
} 

Window root = DefaultRootWindow(disp); 
Screen* scr = XDefaultScreenOfDisplay(disp); 

XCloseDisplay(disp); 

Ich weiß, dass XCloseDisplay Window root aufzuräumen werden, da sie alle Fenster und Ressourcen-IDs zerstört.

Was ich nicht weiß ist, ob ich manuell XFreeScreen Objekte von X-Funktionen wie XDefaultScreenOfDisplay wie im Beispiel zurückgegeben werden muss.

Alle Informationen zu diesem Fall oder sogar eine verallgemeinerte Regel für die Verwendung von Xfree wären sehr hilfreich.

Antwort

2

Raw X, wie das Windows SDK ist eine C-Schnittstelle.

Es gibt ungefähr 7 Handbücher für X-Windows wie http://shop.oreilly.com/product/9781565920026.do und http://shop.oreilly.com/product/9781565920033.do. Diese gibt es seit 1992. Wie Windows sind sie voller Beispiele. Alternativ gibt es das Internet - geben Sie einfach den Befehl ein, die meisten Seiten sind online.

Die Manual-Seiten sagen Ihnen, ob ein Befehl freigeschaltet werden muss oder nicht.

Die Manpage für XDefaultScreenOfDisplay erwähnt keine Freigabe, so dass sie nicht benötigt wird.

Wenn Sie auf die man-Seite für XGetVisualInfo schauen, wird es sagen, dass Sie die Struktur freigegebene XFree-Anwendungen freigeben können.

+0

Ich weiß, dass die Manpage es nicht explizit erwähnt, aber das Xlib-Handbuch gibt an "Sie müssen XFree verwenden, um alle Objekte freizugeben, die von Xlib zugewiesen wurden." Ich frage mich also, ob der 'Screen *', der von 'XDefaultScreenOfDisplay' zurückgegeben wurde, durch den Funktionsaufruf zugewiesen wurde oder ob er im Wesentlichen ein statisches Mitglied des' Display * 'ist. Daher meine Verwirrung. Ich denke, ich werde lernen, darauf zu vertrauen, wenn die Manpages nicht sagen, etwas zu tun, es ist, weil du es nicht tun musst, nicht weil die Betreuer erwarten, dass du weißt, es zu tun. – jhbh

+0

Die Philosophie, der ich folge, ist **, wenn die Manpage mir nicht sagt, dass ich frei bin, ich nicht frei **. Es scheint zu funktionieren. Es ist eine typische Unix-Philosophie - sie beschwert sich nur oder hebt Informationen hervor, wenn etwas falsch oder anders ist. Wenn nichts falsch ist oder es Standardverhalten ist, sagt es Ihnen nichts darüber. – cup

2

Anwendungen sollten keinen Teil der Anzeige- und Bildschirmstrukturen direkt ändern. Die Mitglieder sollten als schreibgeschützt betrachtet werden, obwohl sie sich aufgrund anderer Vorgänge auf dem Display ändern können.

Dies bedeutet, dass, dass diese Strukturen durch XLib verwaltet und man sollte sie nicht free oder XFree. Das Freigeben einer Struktur bedeutet, dass der Speicher, den sie belegte, für andere Daten reserviert und eventuell überschrieben werden kann.

+0

HA! genau dort auf Seite 9 lol. Ich kann nicht glauben, dass ich nicht nach "Bildschirmstruktur" gesucht habe. – jhbh