SewiGの日記
2005-04-03 [日] [長年日記]
■ [Programming] Threadクラス
Win32APIのCreateThread関数、ExitThread関数をラップしてインタフェースをJavaライクにしたクラスを作りました。しかし友人から指摘がありました。
CreateThread関数、ExitThread関数を使用した場合、Win32API以外の構成でプログラミングができない、と。
C のランタイムライブラリに記録されている関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、C のランタイム関数であるbeginthread 関数と endthread 関数を使うべきです。この方法に従わないと、ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。
「MSDN ライブラリ」
いわゆる再入不可能な関数が含まれているから危険だということです。複数のプログラムから同じ関数が実行される場合に、もし静的変数が使用されていた場合はデータの矛盾により予期しない動作が発生するからです。
そこで_beginthreadex関数と_endthreadex関数です。process.hが必要です。これらは、セキュリティ設定・優先度設定・スレッド識別子が使用可能で、正常に初期化してくれたり、メモリリークが発生しません。使い終わったらCloseHandle関数で閉じてください。