Seaside Laboratory

Posts

BCC でマルチスレッド

スレッドを作成する場合、Win32 API の CreateThread か C 関数版の _beginthread のどちらかを使うことになるが、CreateThread はスレッドの中で C ランタイム関数を使うとメモリリークするので、_beginthread を使うのがお約束となっている。

C のランタイムライブラリに記録されている関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。

だが、よく見ると _beginthread の頭にはアンダースコアがついている。アンダースコアが付いている関数はマイクロソフト独自の拡張なので、VC++ はいいとして、BCC のときはどうすればいいのか気になったので調べてみた。

マルチスレッドプログラムのコンパイル

-WM をつけると、mt-safe なライブラリをリンクしてくれます。VC++ 同様、_beginthread() も使えます。

ということだったので、早速 BCC Developer のプロジェクト設定で、マルチスレッドにチェックを入れると、_beginthread を使ったスレッド作成が問題なく動いた。