2017-06-13 23 views
1

現在、私は時々X11関数を直接使う必要があるプロジェクトに取り組んでいます。すべてが広く文書化されているWindowsの世界から出てくる、私は比較的希薄なLinuxのドキュメントを見つけて掘り下げるのに苦労しています。例えばX11リソース解放(特にScreenオブジェクト)

、私はコードを持っている場合:

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

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

XCloseDisplay(disp); 

を私はそれがすべてのウィンドウとリソースIDを破壊するため、XCloseDisplayがWindow rootをクリーンアップすることがわかっています。

私が手作業で行う必要があるかどうかわからないのは、XFreeScreen例のようにX関数から返されたオブジェクトがXDefaultScreenOfDisplayです。

このケースに関する情報、またはXfreeをいつ使うべきかに関する一般的な規則さえあれば、非常に役に立ちます。

答えて

2

Raw Xは、Windows SDKのようにCインターフェイスです。

http://shop.oreilly.com/product/9781565920026.dohttp://shop.oreilly.com/product/9781565920033.doのように、X-Windowsのマニュアルは約7つあります。これらは1992年以来存在しています。Windowsのように、それらは例の完全です。あるいは、インターネットがあります。コマンドを入力するだけで、ほとんどのページがオンラインになります。

マニュアルページには、コマンドの解放が必要かどうかが示されます。

XDefaultScreenOfDisplayのマニュアルページにはフリーズが記載されていないため、必要ありません。

XGetVisualInfoのマニュアルページを見ると、XFreeを使って返された構造体を解放することができます。

+0

マニュアルページに明示的に言及していませんが、Xlibマニュアルには「Xlibによって割り当てられたオブジェクトを解放するためにXFreeを使用する必要があります」と記載されています。だから私は、 'XDefaultScreenOfDisplay'によって返された' Screen * 'が関数呼び出しによってalloc'dされているのか、それとも本質的に' Display * 'の静的メンバーであるかどうか疑問に思っています。それで私の混乱。 私は、メンテナがあなたがそれをするのを知っていると期待しているわけではないので、あなたがそれをする必要はないので、何かをするためにマンページが言わないならば、それを信じることを学ぶでしょう。 – jhbh

+0

私が従う哲学は、マニュアルページが私に解放するように言わなければ、私は自由ではない**です。それは動作するようです。これは典型的なUnixの哲学です。何かが間違っているか違う場合にのみ、情報に不満を抱かせたり強調したりします。何も間違っていたり、標準的な動作でなければ、それについて教えてくれません。 – cup

2

アプリケーションでは、ディスプレイと画面構造の一部を直接変更しないでください。メンバーは読み取り専用である必要がありますが、ディスプレイ上の他の操作の結果として変更される可能性があります。

これは、これらの構造はXlibが管理され、1つは、それら freeXFreeてはならないことことを意味します。構造体を解放すると、占有していたメモリを他のデータに割り当てることができ、最終的に上書きされます。

+0

HA!そこの9ページのLOL。私は私が "スクリーン構造体"を検索すると思っていないと信じていません。 – jhbh

関連する問題