bcb idhttp 线程下载问题

wanganfuz 2010-12-31 04:00:35
将idhttp写在了线程里面下载,

开启线程
NewAPI   *thread=   new   NewAPI(true,CloseStatus,"tid");
thread->FreeOnTerminate=true;
thread->ComStyle="TBPCGet";
thread->Resume();
while(WaitForSingleObject((void* )thread-> Handle,100)==WAIT_TIMEOUT)
{
Application->ProcessMessages();
}


现在发现用别的按钮再次开启的时候

NewAPI   *thread=   new   NewAPI(true,CloseStatus,"tid");
thread->FreeOnTerminate=true;
thread->ComStyle="xxxxx";
thread->Resume();
while(WaitForSingleObject((void* )thread-> Handle,100)==WAIT_TIMEOUT)
{
Application->ProcessMessages();
}



前一个下载会停掉,只会在下一个下载好后继续。请教下各位原因!分实在没了
...全文
262 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanganfuz 2011-01-04
  • 打赏
  • 举报
回复
我只是想可以一起下载,下载一个下载的话,其他线程都会暂停,有什么具体办法吗,或者写法
wanganfuz 2011-01-04
  • 打赏
  • 举报
回复
是WaitForSingleObject()的缘故吗?现在一次都只能运行一个线程,其他等待
wanganfuz 2011-01-04
  • 打赏
  • 举报
回复
急等啊
__lhy 2010-12-31
  • 打赏
  • 举报
回复
SwitchToThread()被执行的时候,
系统会查看是否存在一个需要CPU时间的线程,如果没有,就立即返回。
如果存在,就对该线程进行调度。
(该线程的优先级可以低于调用SwitchToThread的线程)
From 《Windows核心编程》
一个类似的函数是Sleep
该函数只在NT(2000、XP)上有
__lhy 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanganfuz 的回复:]

C/C++ code
void __fastcall NewAPI::Execute()
{
if (ComStyle=="xxxxx")
{
DDGetError=false;
TXMLDocument *XMLDDDetail=new TXMLDocument(NULL);
XMLDDDetail->Active=False;
XMLDDDetail->XML->Clear();
TIdH……
[/Quote]
SwitchToThread
wanganfuz 2010-12-31
  • 打赏
  • 举报
回复
??楼上的意思是
辛鹤 2010-12-31
  • 打赏
  • 举报
回复
用thread
wanganfuz 2010-12-31
  • 打赏
  • 举报
回复
线程就做一个下载操作,如果其他地方new这个线程就会卡着等待
wanganfuz 2010-12-31
  • 打赏
  • 举报
回复
void __fastcall NewAPI::Execute()
{
if (ComStyle=="xxxxx")
{
DDGetError=false;
TXMLDocument *XMLDDDetail=new TXMLDocument(NULL);
XMLDDDetail->Active=False;
XMLDDDetail->XML->Clear();
TIdHTTP *IdCS1=new TIdHTTP(NULL);
IdCS1->ConnectTimeout=20000;
IdCS1->ReadTimeout=20000;
IdCS1->ProtocolVersion=pv1_1;
IdCS1->AllowCookies=True;
IdCS1->ProxyParams->BasicAuthentication=false;
IdCS1->HTTPOptions<<hoInProcessAuth<<hoKeepOrigProtocol<<hoForceEncodeParams;
IdCS1->HandleRedirects=false;
try
{
XMLDDDetail->LoadFromXML(IdCS1->Get(DDGetURL));
IdCS1->Disconnect();
}
catch(...)
{
bool linkerror=true;
for (int i = 0; i < 3; i++)
{
TIdHTTP *IdCS=new TIdHTTP(NULL);
IdCS->ConnectTimeout=20000;
IdCS->ReadTimeout=20000;
IdCS->ProtocolVersion = pv1_1;
IdCS->AllowCookies = True;
IdCS->ProxyParams->BasicAuthentication=false;
IdCS->HTTPOptions<<hoInProcessAuth<<hoKeepOrigProtocol<<hoForceEncodeParams;
IdCS->HandleRedirects=false;
XMLDDDetail->Active=False;
XMLDDDetail->XML->Clear();
try
{
XMLDDDetail->LoadFromXML(IdCS->Get(DDGetURL));
IdCS->Disconnect();
delete IdCS;
linkerror=false;
break;
}
catch(...)
{
delete IdCS;
}
}
if (linkerror==true)
{
delete IdCS1;
delete XMLDDDetail;
DDGetError=true;
return;
}
}
delete IdCS1;
Form_Main->XMLDD->XML->Text=XMLDDDetail->XML->Text;
delete XMLDDDetail;
}
}
wanganfuz 2010-12-31
  • 打赏
  • 举报
回复
[code=C/C++]void __fastcall NewAPI::Execute()
{
if (ComStyle=="xxxxx")
{
DDGetError=false;
TXMLDocument *XMLDDDetail=new TXMLDocument(NULL);
XMLDDDetail->Active=False;
XMLDDDetail->XML->Clear();
TIdHTTP *IdCS1=new TIdHTTP(NULL);
IdCS1->ConnectTimeout=20000;
IdCS1->ReadTimeout=20000;
IdCS1->ProtocolVersion=pv1_1;
IdCS1->AllowCookies=True;
IdCS1->ProxyParams->BasicAuthentication=false;
IdCS1->HTTPOptions<<hoInProcessAuth<<hoKeepOrigProtocol<<hoForceEncodeParams;
IdCS1->HandleRedirects=false;
try
{
XMLDDDetail->LoadFromXML(IdCS1->Get(DDGetURL));
IdCS1->Disconnect();
}
catch(...)
{
bool linkerror=true;
for (int i = 0; i < 3; i++)
{
TIdHTTP *IdCS=new TIdHTTP(NULL);
IdCS->ConnectTimeout=20000;
IdCS->ReadTimeout=20000;
IdCS->ProtocolVersion = pv1_1;
IdCS->AllowCookies = True;
IdCS->ProxyParams->BasicAuthentication=false;
IdCS->HTTPOptions<<hoInProcessAuth<<hoKeepOrigProtocol<<hoForceEncodeParams;
IdCS->HandleRedirects=false;
XMLDDDetail->Active=False;
XMLDDDetail->XML->Clear();
try
{
XMLDDDetail->LoadFromXML(IdCS->Get(DDGetURL));
IdCS->Disconnect();
delete IdCS;
linkerror=false;
break;
}
catch(...)
{
delete IdCS;
}
}
if (linkerror==true)
{
delete IdCS1;
delete XMLDDDetail;
DDGetError=true;
return;
}
}
delete IdCS1;
Form_Main->XMLDD->XML->Text=XMLDDDetail->XML->Text;
delete XMLDDDetail;
}
}code]
ccrun.com 2010-12-31
  • 打赏
  • 举报
回复
你的线程里是怎么实现的?
wanganfuz 2010-12-31
  • 打赏
  • 举报
回复
在线等··

1,316

社区成员

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

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