クロスプラットフォーム プロジェクトでスレッド ローカル ストレージを利用する必要があります。*IX では pthreads を使用しており、 の 2 番目の引数として渡される素敵なデストラクタ関数ポインタのおかげでメモリ リークを回避できますpthread_key_create
が、WindowsTlsAlloc
ではそのようなことはありません。また、スレッドの終了時に関数が呼び出される一般的な場所を見つけることもできません (それ以外の場合は、終了時に呼び出される関数ポインターのリストを自作します)。
現状では、スレッドローカルストレージを実際に使用するには、ヒープに独自のスペースを割り当ててへのポインターを渡す必要があるという状況が基本的にあるようですがTlsSetValue
、スレッドが終了した場合...私には保証する方法がありませんメモリが解放されました (誰かが明示的に呼び出しTlsGetValue
ている場合と、スレッド関数の最後に // /etc がある場合を除きますdelete
。free
HeapFree
誰かがより良い方法を知っていますか?