线程挂起后再resume后,没有反应了(40分)

  • 主题发起人 主题发起人 prtmon
  • 开始时间 开始时间
P

prtmon

Unregistered / Unconfirmed
GUEST, unregistred user!
多线程
constructor TMyThread.Create();
begin
inherited Create(True);
FreeOnTerminate:=True;
Priority:=tpLowest;
end;

procedure TMyThread.Execute;
begin
repeat
{很长的处理过程
EnterCriticalSection(Critical1);
.........
LeaveCriticalSection(Critical1);
}
until Terminated;
end;

按钮1事件:
for i:=0 to 30do
MyDFCJThread.Resume;
按钮2事件:
for i:=0 to 30do
MyDFCJThread.Suspend;

第一次执行按钮1事件,成功执行线程
过一段时间执行按钮2事件,成功挂起线程
再按按钮1事件,成功恢复线程
过一段时间执行按钮2事件,成功挂起线程
再按按钮1事件,竟然没反应了,不知道是什么原因...
 
会不会是在进入临界后,刚好挂起,这时没有退出临界,然后在resume后,就进入不了临界而造成线程堵塞了?
 
建议不要在临界区内挂起,有可能会引起死锁,让线程在执行完退出临界区后挂起。
 
改用timer组件了,多线程太难控制了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部