gdk_threads_enter()

| No Comments

GLib の object は全部自動的にロックされるが、GTK ではそうではない。だけど、ちゃんと thread aware な作りになっている。というのを今日はじめて知った。お恥ずかしい。いままでは GTK を使うのはメインのプロセスだけで、他のスレッドでは GTK には絶対手を触れないようにしてた (つもりだったが、一カ所チョンボをしているところがあり、そこでたまに死んでた... ) のだ。

で、GTK で thread を使うときは、gtk_init() の前に gdk_threads_init() しておき、他のスレッドから GTK を操作するときには gdk_threads_enter() で lock して、gdk_threads_leave() で unlock するんだそうだ。これで万全。

ここで、「GTK の操作」というのには、GTK と競合するおそれのある、Pango や何かを使う操作も含まれると考えたほうがよい。Freetype の内側あたりで競合が発生して crash する場合には、gdk_threads_{enter,leave}() を使って解決できる。

でも、Win32 backend では、これは効かない。効かないだけでなく、呼んではいけない (!) ようだ。

Leave a comment

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.02

September 2010

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

About this Entry

This page contains a single entry by Yasunori Osana published on December 26, 2007 12:30 AM.

Is GPL a joke? was the previous entry in this blog.

Google Profiler is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.