Seaside Laboratory

Post

怪盗ロワイヤル用ウィンクツール作成記 (マルチスレッド編)

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

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

だが、よく見ると _beginthread の頭にはアンダーバーがついている。アンダーバーが付いている関数はマイクロソフト独自の拡張なので、VC++ はいいとして、BCC の場合はどうなるんだ?と思い調べてみた。

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

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

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