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 を使ったスレッド作成が問題なく動いた。