C++でlinuxを使うことが増えたが、pthreadに限らずライブラリ関係のコールバックとC++のクラスがうまいこと切り分けできず、汚いコードになりそうだったのでちょっと調べた。
pthreadや同期/排他関係のライブラリの使い方はこのページが良くまとまってて参考になった。
で、肝心のクラスとライブラリの連携はこちらを参考にさせていただいた。
thread の鬱陶しい点は、(class 化とは関係無く むつかしい排他制御や同期問題は別として — これらは プログラム設計上の問題であって、class 化したから やさしくなるという問題ではない)関数への pointer を 必要とする点である。これと class を結びつける方法で あれこれ悩む(実装が困難という意味ではない。どう すれば使いやすい実装になるかを見切るのがむつかしい という意味)。
まったく持って同じ理由で困っていたのだが、面倒くさかった自分がJava慣れしているので使いやすかったので、サンプルに書かれていたものをほぼそのまま使わせてもらうことにしました。
同じようにコールバックを使ったSQLiteの実装は手抜きして(ぉ)static関数をクラスの外に用意して隠蔽しちゃったけど、実装読む人が可哀想だしこの手を使ってインスタンス毎で振る舞いを変えやすいようにスーパークラスを暇があったら作ろう。
最後に、参考にさせていただいた方に感謝の意を表します。
面倒くさい
Comments are closed here.