Windowsのマルチスレッドと言えば、CreateThread、_beginthreadなどのAPIを思い浮かべる方が多いかと思います。

AB5でのクラスライブラリでは勿論ながらスレッド関連のクラスも提供する予定ですが、これはただ単にスレッド関連のAPIをラップするだけの働きではなく、スレッド間のメモリ管理も請け負う高機能なクラスにまとめあげていきます。

AB5でGCを扱う場合、更には対象アプリがマルチスレッドを利用する場合はこの新しいスレッドクラスは必需な存在になります。

ということで、スレッドクラスの必要性をおさえた上で、具体的な実装方法を検討していきたいと思います。

私の中で選択肢として出ているのは下記の2通りの方法。

  • Threadクラスをインスタンス化する方法(C#、VB.NETなどはコレ)
  • Threadクラスの派生をインスタンス化する方法(Javaなどはコレ)

D言語などはどちらの特性も持ち合わせるハイブリット構造になっているようです。

双方がどのように違うかと言うと、新しいスレッドを生成するときに、メソッドそのものを指定するのか、またはクラスを指定してオーバーロードされたRunメソッドを実行するのかの違いくらいですかね。前者の方法は、デリゲート機能が付いている言語で効力が発揮できそうです。

資料をあさっていたら、MFCのCWinThreadなどというちょっと懐かしいものを見つけてしまいました。こちらは完全なるAPIのラップクラスですね。