为什么我的多线程退出的时候会蓝屏???

honestman 2001-08-17 10:36:03
我用多线程来操作数据库,多线程在主线程运行时被创建,在主线程退出时唤醒多线程退出。
我的多线程中创建ADOConnect和ADOQuery来操作数据库,在多线程退出时释放他们。
当主线程要操作数据库时唤醒多线程,多线程完成操作后自己自动挂起。
我是在多线程被挂起时才退出出线程的,为什么还会蓝屏啊?
...全文
240 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
honestman 2001-08-19
  • 打赏
  • 举报
回复
up
BCB 2001-08-18
  • 打赏
  • 举报
回复
每个线程不能共享ADOConnect和ADOQuery的同一实例
honestman 2001-08-18
  • 打赏
  • 举报
回复
在98下跑会蓝屏,在2000下没有。
但是,在2000下会无故退出。
为什么会这样?
honestman 2001-08-18
  • 打赏
  • 举报
回复
但是,我已经在Onclose中加入了:
for i:=0 to MaxThreads-1 do begin
ThreadsObjects[i].Terminate;
ThreadsObjects[i].Resume;
end;
在线程的Execute中是:
while not terminated do begin
......
adoct.Connected:=false;
suspend;
adoct.Connected:=true;
end;
adoct.Connected :=false;
adoqt.free;
adoct.free;
dana 2001-08-18
  • 打赏
  • 举报
回复
应该是你线程的调用有问题,
捕捉一下你的错误代码。
Mercedes 2001-08-18
  • 打赏
  • 举报
回复
子线程被挂起?应该先退出子线程再退出主线程吧?被挂起的子线程可能会收不到主线程退出的消息,从而可能引起蓝屏。
honestman 2001-08-18
  • 打赏
  • 举报
回复
因为经常要唤醒,如果多次释放再创建好象不太好吧?
TFPE 2001-08-18
  • 打赏
  • 举报
回复
多线程非要建立新的连接吗?为什么不释放而是挂起呢?
honestman 2001-08-18
  • 打赏
  • 举报
回复
我是在每个线程中创建ADOConnect和ADOQuery的。
try
inherited create(suspended);
freeonterminate:=true;
threadid:=i;
adoct:=TADOConnection.Create(nil);
adoqt:=TADOQuery.create(nil);
adoct.ConnectionString:=form1.ADOC_main.ConnectionString;
adoct.LoginPrompt :=False;
adoct.Mode:=cmShareDenyNone;
adoct.Provider :=form1.ADOC_main.Provider;
adoqt.Connection :=adoct;
adoct.Connected :=true;
except
form1.M_send.Lines.Add('线程'+inttostr(i)+'创建失败!');
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧