久しぶりのOpenInventor

2ヶ月以上前にハマっていたOpenInventorのプログラムだが,実はあの後も本質的には解決できていなかったのであった.けど,その動作が不安定なプログラムで発表もテキトーにデモして(1回しか落ちずに動いてくれた),それっきりで放置してあった.でも本当は学会以前の期間に(内心気づいていながら)見てみぬふりをしていた部分があったのだ.

というのは,プログラムの中でOpenInventor(というかCoin3dだけど)を呼んでいるのが,main()のスレッドではなく,そこからbeginthread()された子スレッド…っていうのかな?まぁ要は派生したスレッドの中で処理されているのだ.一応,Coin3dの初期化なども含めて全て同一のスレッド内で処理するように,かなりトリッキーな(=汚い)処理はしていたし,一番最初にいろんなスレッドでやらためったら処理してた時に比べれば格段に安定していたが,それでもやっぱり微妙に不安定だ.

で,実はもうすぐ職場の合宿(*)があるのだが,それでデモプログラムを使う予定なので,しぶしぶ直すことにした.…面倒くさいから,かなり強引な修正をしたが.要は,今までのmain()をそのままhogehoge()に名前を変えて,そいつを新しいmain()からスレッドで起動するようにしたのだ.逆に,今まで別スレッドで処理してたCoin3dの処理は全て新しいmain()側に持ってくる.…その結果,予想通り安定して動くようになった.中で何が起きてるのか知らんが,スレッドによる違いって,何なんだろう??

とにかく,「Coin3dはメインのスレッドで使いなさい」ということだな.

*:「職場の合宿」といっても普通はピンとこないだろうが,「慰安旅行」ではないし,「名目上の研修旅行,実態は…」とかいうものでもなく,本当に合宿だ.職場の某氏は「回数を重ねるごとに行きたくなくなるイベントってのも珍しいよね」「あんなつまらないイベントに時間遣うんだったらさ,自費でも良いから楽しい場所に旅行に行きたいよねぇ?」と言っていたが,かなり同意だ.