多线程 Indy10 TIdhttp 死锁。 ( 积分: 200 )

  • 主题发起人 主题发起人 WQmeng
  • 开始时间 开始时间
W

WQmeng

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序创建了多个线程,每个线程里面创建了一个IDhttp的对象。 然后通过Idhttp访问网站。 程序运行较长后会发生死锁。 观察了几天后,发现问题是Idhttp自己死了。 其中一个线程的Idhttp在connecthost时锁住后,其他线程中的idhttp对象也会受影响一起锁住。 虽然idhttp有timeout的超时设置,但是因为是在connecthost时锁住,此时timeout还不起作用。
我测试时,检查到死锁的对象后调用idhttp.disconnect 仍然无效,而且会在disconnect处锁住,程序没有响应。
所以我想问问,这里的朋友有没有人以前遇到过这样的情况,是如何解决的? 有没有其他变通的方法。
 
我的程序创建了多个线程,每个线程里面创建了一个IDhttp的对象。 然后通过Idhttp访问网站。 程序运行较长后会发生死锁。 观察了几天后,发现问题是Idhttp自己死了。 其中一个线程的Idhttp在connecthost时锁住后,其他线程中的idhttp对象也会受影响一起锁住。 虽然idhttp有timeout的超时设置,但是因为是在connecthost时锁住,此时timeout还不起作用。
我测试时,检查到死锁的对象后调用idhttp.disconnect 仍然无效,而且会在disconnect处锁住,程序没有响应。
所以我想问问,这里的朋友有没有人以前遇到过这样的情况,是如何解决的? 有没有其他变通的方法。
 
关注下,我也最近在用IdHTTP
 
可以写个异常处理程序啊,如果异常,就中断或者怎么的啊。应该有些用的。
 
to: gamebobyda
这里不是异常的问题,死锁后Idhttp停止运行了,不会触发异常。
to:zqw
一同学习,呵呵
 
加上indy misk中的线程管理控件看看
 
我觉得不一定是TIdhttp的问题,我用了很久,也是每个线程创建一个TIdHttp的对象,没遇到这种情况。
查一查是不是做其它操作导致的死锁
 
to lxw5214
谢谢,misk 总的线程控件是处理TIdTcpServer的,这里用不上。
to utop
一开始我也认为是其他地方的问题,但是通过日志来看是在进入到了Idhttp的代码后线程失去的响应。 Idhttp代码返回就两种情况,一种正常退出,一种异常退出,结果发现idhttp死锁后即没有正常退出,也没有异常抛出来。
 
WQmeng兄,这问题好多天了。呵呵,还没找到答案啊。唉,帮你顶。
 
可能是其中有的连接没有释放,缓冲区大小不够
 
to zqw0117 :
呵呵,这个问题所在不好找,没有异常,就运行着然后静静的停了,而且没有规律,有时几个小时后,有时几十分钟。
to sundata :
好谢谢提醒,我看看是不是相关的问题。
 
我在每个线程里面创建一个IdFTP,情况也差不多,一段时间后,就出现错误,这个错误,就算线程Try Except了IdFTP后都,但主程序一样出现错误,真奇怪。。
 
后退
顶部