程序退出时出现Exception EAccessViolation怎么回事?
我写了个程序,带多线程的,因为需要调用主窗体的许多资源,所以我在线程中直接传入了主窗体对象,运行没有什么问题,但是退出整个程序的时候(线程已释放),却出现以下错误:
Application Error
--------------------------------------------------------------
Exception EAccessViolation in module PrjThread.exe at 00000000.
Access violation at address 00000000. Read of address 00000000.
我整理了一下,程序大概是这个结构:
--------------------------------------------------------------
{untMain.pas}
type
TfrmMain = class(TForm)
......
private
FThreads: array of TThread;
......
//在主窗体的一个过程中创建线程对象
for i := 0 to MAX_THREADS do
FThreads[i] := TMyThread.create(Self);
{untMyThread.pas}
type
TMyThread = class(TThread)
......
private
FForm: TfrmMain;
public
constructor Create(aForm: TfrmMain);
......
//实现部分
constructor TMyThread.Create(aForm: TfrmMain);
begin
inherited Create(False);
FForm := aForm;
......
--------------------------------------------------------------
另外,如果在Execute中使用Synchronize,则在创建线程的时候会完全没有反应,整个程序瘫死掉。
不知道是哪儿不对啊?请高手赐教!