時々(非常にまれに)TThreadの終了/解放時にViolateにアクセスする短いコードを実行しています。私はこれらのスレッドの多くのインスタンスを実行していますが、問題を引き起こしているのはこのスポットだけのようで、500回程度の呼び出しごとに1回だけ発生します。
TThreadInheritor* Base= new TThreadInheritor(1);
try {
Base->Start();
WaitForSingleObject((HANDLE)Base->Handle, 1000);
MyBaseId = Base->scanvalue;
}__finally {
Base->Terminate();
Base->Free();
}
いよいよ投げ込まれています。私の最初の推測では、WaitForSingleObjectが奇妙な方法でタイムアウトし、TerminateとFreeが混乱していましたが、それがどのように発生するかはよくわかりません。TThreadから継承したとき、Terminate/Freeメソッドとは何の関係も変更しませんでした。
ほんの少しのコードの後で、これら2つのメソッドが違反にアクセスする原因が何であるかを知っている人はいますか?