WaitForSingleObject等待一个线程一段时间

mozm 2012-06-25 11:03:44
如等待的时间为3秒,若超过这段时间线程还没有结束,WaitForSingleObject 返回WAIT_TIMEOUT,这时不想线程再继续运行下去,请问这应该怎么关闭
...全文
525 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独de猫 2012-11-06
  • 打赏
  • 举报
回复
顶下6楼 TerminateThread,这个API 会强行终止线程,但是不会释放线程资源。容易造成内存泄露,用TTread自带的Terminate,然后 在线程中的Execute中加入

while not terminated do
begin
   //.....
end;
lyl357159 2012-11-06
  • 打赏
  • 举报
回复
//最多等待3秒让工作者线程自行终止。 if WAIT_TIMEOUT = WaitForSingleObject(f_MonitorThread.Handle, 3000) then begin TerminateThread(f_MonitorThread.Handle, 0); end;
xiaocongzhi 2012-07-10
  • 打赏
  • 举报
回复
TerminateThread这个可用,不过要慎用
aTian2009 2012-07-06
  • 打赏
  • 举报
回复
lz只想用这个WaitForSingleObject 吗?
可以尝试在主线程中用Terminate,
在Execute中
if Terminated then Break;
「已注销」 2012-06-25
  • 打赏
  • 举报
回复
结束其他线程可以使用TerminateThread函数,但是这个做法是非常不建议使用的的。因为你不知道其他的线程正在做什么。强行结束掉他是很粗鲁的行为,意味着你的代码设计得有问题。
mozm 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
if WaitForSingleObject(hSignObj,3*1000) = WAIT_TIMEOUT then
//跳出线程执行,这有很多方法,如果你用的是delphi的TThread,你可以使用termited := true;
//如果是自己的win32api创建的线程,那你自己根据需要跳出循环就行了,然后exitthread(0)调用
[/Quote]

如你这里是要等待hSignObj这个线程结束,若超时的话,我想调用WaitForSingleObject的线程继续运行,而hSignObj(这个线程是会调用一些阻塞函数的,httpsendrequest之类的)这个线程不继续运行,我试了exitthread(0)这个好像是把调用WaitForSingleObject的线程停止了
「已注销」 2012-06-25
  • 打赏
  • 举报
回复
if WaitForSingleObject(hSignObj,3*1000) = WAIT_TIMEOUT then
//跳出线程执行,这有很多方法,如果你用的是delphi的TThread,你可以使用termited := true;
//如果是自己的win32api创建的线程,那你自己根据需要跳出循环就行了,然后exitthread(0)调用
robotdeng 2012-06-25
  • 打赏
  • 举报
回复
线程无法强制结束...

请修改线程代码, 减小循环体. 我的BLOG有写这个部分.
mozm 2012-06-25
  • 打赏
  • 举报
回复
httpsendrequest这个函数一阻塞就要等很长时间的,也想不到什么方法来处理

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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