我正在运行一小段代码,这些代码偶尔会(很少)在我的 TThread 的终止/释放时违反访问权限。我正在运行这些线程的许多实例,但这个地方似乎是唯一导致问题的地方,而且它每 500 次左右调用才这样做一次。
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 方法有关的任何内容。
任何人都知道在这么少的代码之后可能导致这两种方法访问冲突的原因是什么?