おはようございます、高木です。

前回、次から(つまり今回から)は実際のラッパーの内容に触れていきたいといきたいと書きましたが、もうひとつ重要な検討課題を忘れていました。
スレッドに関する方針です。

とりあえずシングルスレッドだけを考えて、あとからマルチスレッド対応するような場当たり的な対応をするのは得策ではありません。
ですので、どうしても最初に方針を決めておく必要があります。

Tcl/Tk自体はマルチスレッドに対応しています。
Tcl API自体もマルチスレッドを想定していますし、マルチスレッドのスクリプトを書くためのthread拡張も存在します。

ところが、イベント処理に使うTcl_DoOneEvent関数はプロセス内で共通ですし、内部でTcl_DoOneEvent関数を呼び出すTk_MainLoop関数もしかりです。
できれば、スレッドごとに完全に独立したTcl/Tk環境を作りたいのですが、そうはいかないのです。

今回のラッパーライブラリの趣旨は、C++で手軽にGUIを作れるようにすることです。
その意味では、Tcl/Tkを扱うスレッドはひとつに限定してしまっても問題なさそうです。
別のスレッドから非同期イベントを発生させるぐらいはできたほうが便利ですが、それ以上は不要でしょう。

Tcl/Tkを扱うスレッドをひとつに限定できるのであれば、排他制御やリエントランス性に関する配慮もほぼ必要なくなります。
結果、設計や実装を簡略化できると思います。

次回からはいよいよ実際の中身を考えていくことにします。