第二帖: 关于使用Indy导致界面idle的问题

alloutoflove 2005-10-18 03:15:19
Indy确实挺方便, 不过.........

花了些时间把Indy10下载安装完成后放到自己的应用程序中, 使用TIdHTTP读取网站上的文件, 我用自己本机localhost做实验的... 结果发现如果目标文件在目标服务器不存在的话, 代码一运行到

IdHTTP->Head(HttpFile);

这里程序就fly to the sky啦...断点也跟不上了... 界面idle, 后来在Form上加了一个TIdAntiFreeze也无济于事...

如果目标文件存在的话, 程序可以顺利执行.

会不会只是Indy10的问题?
...全文
152 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
alloutoflove 2005-10-22
  • 打赏
  • 举报
回复
嗯,我现已经改回用NMHTTP了,虽然发现几个bug,不过费了好大劲也让程序适应bug了...

多谢楼上的,我怎么就没想到用线程, 难道是因为偶对Indy太信任啦^_^

帖子偶先结了吧, 谢谢两位的回复.
constantine 2005-10-22
  • 打赏
  • 举报
回复
用线程记得也有一点停顿,一闪而过,不过好很多
constantine 2005-10-22
  • 打赏
  • 举报
回复
我做过一次,这个控件好象是不行,如果能连上就没事,如果连不上try要等timeout,indy是阻塞的,所以会死掉,放上你说的控件也不行,我自己是把这些动作放到独立一个线程里面去的
indy10 我没有用过,我用过9,例子你可以用盒子上的断点下载试试就知道,连不到就会
alloutoflove 2005-10-22
  • 打赏
  • 举报
回复
继续顶...

PS:发现楼上已经4个三角啦^_^
xibingwuqing 2005-10-21
  • 打赏
  • 举报
回复
学习一下
alloutoflove 2005-10-21
  • 打赏
  • 举报
回复
再顶一下
alloutoflove 2005-10-20
  • 打赏
  • 举报
回复
顶上去,希望能得到高人更多的指点...
alloutoflove 2005-10-19
  • 打赏
  • 举报
回复
NMHTTP可以是可以,只不过同事说好像有些问题=_=
xibingwuqing 2005-10-18
  • 打赏
  • 举报
回复
用NMHTTP试试,其它不知道了
alloutoflove 2005-10-18
  • 打赏
  • 举报
回复
是这样的,如果我根本不开IIS的http服务的话,执行时会Exception, 但是如果开了服务但服务器中不存在指定文件的话,it happened.
xibingwuqing 2005-10-18
  • 打赏
  • 举报
回复
或者HttpFile有什么非法字符之类的原因,没用过不清楚
xibingwuqing 2005-10-18
  • 打赏
  • 举报
回复
这里没问题,可能你的Indy安装有问题
alloutoflove 2005-10-18
  • 打赏
  • 举报
回复
已经try...catch了

try
{
IdHTTP->Head(HttpFile);
}
catch(...)
{
MessageBox(Handle, "不能连接到更新服务器!", Caption.c_str(), MB_OK|MB_ICONERROR);
return;
}
xibingwuqing 2005-10-18
  • 打赏
  • 举报
回复
这里Indy8报错,估计try,catch就可以了
使用TIdAntiFreeze对抗“冻结”   Indy使用一个特殊的组件TIdAntiFreeze来透明地解决客户程序用户界面“冻结”的问题。TIdAntiFreeze在Indy内部定时中断对栈的调用,并在中断期间调用Application.ProcessMessages方法处理消息,而外部的Indy调用继续保存阻塞状态,就好像TIdAntiFreeze对象不存在一样。你只要在程序中的任意地方添加一个TIdAntiFreeze对象,就能在客户程序中利用到阻塞式Socket的所有优点而避开它的一些显著缺点。   Indy使用了线程技术   阻塞式Socekt通常都采用线程技术,Indy也是如此。从最底层开始,Indy的设计都是线程化的。因此用Indy创建服务器和客户程序跟在Unix下十分相似,并且Delphi的快速开发环境和Indy对WinSock的良好封装使得应用程序创建更加容易。   Indy服务器模型   一个典型的Unix服务器有一个或多个监听进程,它们不停地监听进入的客户连接请求。对于每一个需要服务的客户,都fork一个新进程来处理该客户的所有事务。这样一个进程只处理一个客户连接,编程就变得十分容易。   Indy服务器工作原理同Unix服务器十分类似,只是Windows不像Unix那样支持fork,而是支持线程,因此Indy服务器为每一个客户连接分配一个线程。   图1显示了Indy服务器的工作原理。Indy服务器组件创建一个同应用程序主线程分离的监听线程来监听客户连接请求,对于接受的每一个客户,都创建一个新的线程来为该客户提供服务,所有与这一客户相关的事务都由该线程来处理。   使用组件TIdThreadMgrPool,Indy还支持线程池。   线程与Indy客户程序   Indy客户端组件并未使用线程。但是在一些高级的客户程序中,程序员可以在自定义的线程中使用Indy客户端组件,以使用界面更加友好。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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