如题
代码也帖出来..
procedure TForm1.tjTimer(Sender:TObject);
var
str:TStringList;
begin
str:=TStringList.Create;
IdAntiFreeze1.OnlyWhenIdle:=False; //这里貌似没有起作用...程序还是会停止响应!
try
str.Clear;
str.Text:=IdHTTP1.Get(S_ServerHttp+'tj.txt');
except
str.Text:='';
IdHTTP1.Tag:=0;
end;
str.Free;
end;有谁遇到同样的问题了吗??
高手来来来 分不够可以加
代码也帖出来..
procedure TForm1.tjTimer(Sender:TObject);
var
str:TStringList;
begin
str:=TStringList.Create;
IdAntiFreeze1.OnlyWhenIdle:=False; //这里貌似没有起作用...程序还是会停止响应!
try
str.Clear;
str.Text:=IdHTTP1.Get(S_ServerHttp+'tj.txt');
except
str.Text:='';
IdHTTP1.Tag:=0;
end;
str.Free;
end;有谁遇到同样的问题了吗??
高手来来来 分不够可以加
据说有些版本的Delphi有问题,换个版本就好了……
放在窗体上就行了,不用IdAntiFreeze1.OnlyWhenIdle:=False; 这段代码就行
还是把数据请求写到线程里比较爽啊
delphi2007现在改版本是不很行得通哦.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls;type
TDownLoadThread = class(TThread)
public
Idhtp: TIdHTTP;
constructor Create(CreateSuspend: Boolean);
destructor Destroy;
private
procedure Execute; override;
end;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
// 声明线程对象
DownLoadThread: TDownLoadThread ;
procedure DlThreadTerminate(Sender: TObject);
end;var
Form1: TForm1;
S_ServerHttp: string; implementation{$R *.dfm}{ TDownLoadThread }constructor TDownLoadThread.Create(CreateSuspend: Boolean);
begin
inherited Create(CreateSuspend);
Idhtp := TIdHTTP.Create(nil);
end;destructor TDownLoadThread.Destroy;
begin
Idhtp.Free;
inherited;
end;// 线程执行过程
procedure TDownLoadThread.Execute;
var
str:TStringList;
begin
inherited;
str:=TStringList.Create;
try
str.Clear;
str.Text:=Idhtp.Get('http://www.prize8.com');
Form1.Memo1.Text := str.Text ;
// str.Text:=Idhtp.Get(S_ServerHttp+'tj.txt');
except
str.Text:='';
Idhtp.Tag:=0;
end;
str.Free;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
// 创建线程,并挂起(暂不执行Execute里的内容)
DownLoadThread := TDownLoadThread.Create(True);
// 线程执行完自动销毁
DownLoadThread.FreeOnTerminate := true;
//
DownLoadThread.OnTerminate := DlThreadTerminate;
// 唤醒线程,开始执行Execute里的内容
DownLoadThread.Resume ;
end;procedure TForm1.DlThreadTerminate(Sender: TObject);
begin
// 线程执行完毕,主线程里需要响应的内容
ShowMessage('线程执行完毕.');
end;end.去看看多线程的东西吧,找几个文章多看几遍
#pragma hdrstop#include "Main.h"#pragma package(smart_init)//#define __DebugMODE
__fastcall THTTPGetThr::THTTPGetThr(bool CreateSuspended)
: TThread(CreateSuspended)
{
HTTPRF = new TIdHTTP(NULL);
}
//---------------------------------------------------------------------------
void __fastcall THTTPGetThr::Execute()
{
try
{
HTTPRF->ConnectTimeout = 100000;
// frmAutoRefresher->NILS->Selected = frmAutoRefresher->NILS->Items->Item[];
HTTPRF->Get(Weblink);
// Sleep(1000);
// Sleep(100);
Successed = true;
}
catch(...)
{
Successed = false;
}
delete HTTPRF;
this->Terminate();
}
//---------------------------------------------------------------------------
创建线程 try
{
ThreadPointers[ThreadCount] = new THTTPGetThr(True);
ThreadPointers[ThreadCount]->Weblink = tmpBack;
ThreadPointers[ThreadCount]->OnTerminate = OnThreadEnd;
if(CheckBox4->Checked == true)
{
try
{
ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyServer = pxyName;
ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyPort = StrToInt(pxyPort);
ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyUsername = "";
ThreadPointers[ThreadCount]->HTTPRF->ProxyParams->ProxyPassword = "";
}
catch(...)
{
}
}
ThreadPointers[ThreadCount]->ItemIDX = i;
// ThreadPointers[ThreadCount]->ItemIDX = ;
ThreadPointers[ThreadCount]->Resume();
ThreadCount++; tmrStop->Enabled = False; BitBtn6->Enabled = true;
NILS->Items->Item[i]->Caption = tmpBack;
}
catch(...)
{
}
}把idantifreeze放进主进程里!!!