线程暂停、停止有时拒绝访问?(86分)

  • 主题发起人 主题发起人 heipi2003
  • 开始时间 开始时间
H

heipi2003

Unregistered / Unconfirmed
GUEST, unregistred user!
主线程中想暂停或者停止某个线程,偶尔会出现“线程拒绝访问”的问题
这个时候线程可能在使用缓冲池,如何避免出现这种情况?
子线程中使用 waitForSingleObject(Thread.handle,100000)来等待100秒
在该线程休眠时,在主线程中想卸载这个线程,主程序界面停止响应,等待4-5秒后
该线程才被停止、卸载。如果线程正在运算则马上卸载完毕,这是什么原因?
该如何解决?
 
如果你调用了waitForSingleObject(Hwnd,100000)
那么你需要在这个线程中写一个方法,比如awaken方法,其中调用SetEvent(Hwnd),这样就马上可一唤醒线程了。
》线程拒绝访问
偶认为,也是因为以上原因带来的
 
多谢,测试好像成功了,不知道对不对
FEvent :TSingleEvent;
FEvent:=TsingleEvent.create;
procedure TmyThread.ThreadSleep(iSecond: integer);
begin
WaitForSingleObject(FEvent.handle, iSecond*1000);
end;
当需要关闭线程的时候,
setEvent(Fevent.handle)
这样是否正确,准备加分给你了:)
 
是的,最好这样写
private
FEvent: THandle;
..........
创建:
FEvent:= CreateEvent(nil, False, False, nil);
调用:
SetEvent(FEvent);
释放:
if FEvent<> 0 then
begin
CloseHandle(FEvent);
FEvent:= 0;
end;
而且,如果你写的是一个线程,最好将以上语句写成方法,就更好调用了。
 
多谢,加分咯:)
 
后退
顶部