오늘은 S8S8에 대한 게시물을 보았습니다. 쉘 스크립트, C 언어, C ++, VBS, PHP, Perl, Java 및 C#은 기본적으로 반 시간에 여러 스레드를 사용하는 델파이 버전을 썼습니다. 그러나 몇 장의 사진을 읽은 후에는 아이들에게 적합하지 않았습니다.
완전한 프로그램 코드 :
// 쓰기는 비교적 거칠지 만 기본적으로 다운로드 기능을 실현할 수 있으므로 그렇게 많이 제어 할 수 없습니다.
단위 getmm;
인터페이스
용도
창, 메시지, 시스템, 변형, 클래스, 그래픽, 컨트롤, 양식,
대화 상자, stdctrls, idbasecomponent, idcomponent, idtcpconnection,
idtcpclient, idhttp;
Const
url = 'http : //www.sergeaura.net/tgp/';
Offi = 192; // 디렉토리 수
Offj = 16; // 각 디렉토리의 최대 사진 수입니다
girlpic = 'c :/girlpic/';
// 스레드 클래스
유형
tgetmm = class (tthread)
보호
fmmurl : 문자열;
fdestpath : 문자열;
fsubj : 문자열;
절차 실행; 재정의;
공공의
생성자 생성 (mmurl, destpath, subj : string);
끝;
유형
tform1 = 클래스 (tform)
버튼 1 : tbutton;
버튼 2 : tbutton;
메모 1 : tmemo;
IDHTTP1 : TIDHTTP;
checkbox1 : tcheckbox;
절차 버튼 1Click (sender : tobject);
절차 button2click (sender : tobject);
사적인
{개인 선언}
rgetmm : tthread;
절차 getmmthread (mmurl, destpath, subj : string);
공공의
{공개 선언}
끝;
var
form1 : tform1;
구현
{$ r *.dfm}
// 다운로드 프로세스
절차 tform1.Button1click (sender : tobject);
var
I, J : 정수;
subi, subj, cururl, destpath : 문자열;
strm : tmemorystream;
시작하다
memo1.lines.clear;
// 디렉토리를 만듭니다
DirectoryExists (girlpic)가 아닌 경우
mkdir (girlpic);
노력하다
strm : = tmemorystream.create;
i : = 1 to offi
시작하다
j : = 1 to offj do
시작하다
if (i <10) 그러면
subi : = '00'+inttostr (i)
그렇지 않으면 (i> 9) 및 (i <100)
subi : = '0'+inttostr (i)
else subi : = inttostr (i);
if (j> 9) 그러면
subj : = inttostr (j)
else subj : = '0'+inttostr (j);
cururl : = url+subi+'/images/';
destpath : = girlpic+subi+'/';
DirectoryExists (destpath)가 아닌 경우
강제 교사 (destpath);
// 스레드를 사용하면 속도가 N 시간 이상 증가 할 수 있습니다.
CheckBox1.Checked 경우
시작하다
getmmthread (cururl, destpath, subj);
수면 (500);
다른 끝
// 스레드가 사용되지 않습니다
시작하다
노력하다
strm.clear;
idhttp1.get (cururl+subj+'. jpg', strm);
strm.savetofile (destpath+subj+'. jpg');
memo1.lines.add (cururl+'다운로드 OK!');
strm.clear;
idhttp1.get (cururl+'tn _'+subj+'. jpg', strm);
strm.savetofile (destpath+'tn _'+subj+'. jpg');
memo1.lines.add (cururl+'다운로드 OK!');
제외하고
memo1.lines.add (cururl+'다운로드 오류!');
끝;
끝;
끝;
끝;
memo1.lines.add ( 'All Ok!');
마지막으로
strm.free;
끝;
끝;
절차 tform1.Button2Click (sender : tobject);
시작하다
닫다;
끝;
{tgetmm}
생성자 tgetmm.create (mmurl, destpath, subj : string);
시작하다
fmmurl : = mmurl;
fdestpath : = destpath;
fsubj : = subj;
상속 된 생성 (false);
끝;
절차 tgetmm.execute;
var
strm : tmemorystream;
idgetmm : tidhttp;
destfile : 문자열;
시작하다
노력하다
strm : = tmemorystream.create;
idgetmm : = tidhttp.create (nil);
노력하다
destfile : = fdestpath+fsubj+'. jpg';
FileExists (destfile)가 아닌 경우
시작하다
strm.clear;
idgetmm.get (fmmurl+fsubj+'. jpg', strm);
strm.savetofile (destfile);
끝;
destfile : = fdestpath+'tn _'+fsubj+'. jpg';
FileExists (destfile)가 아닌 경우
시작하다
strm.clear;
idgetmm.get (fmmurl+'tn _'+fsubj+'. jpg', strm);
strm.savetofile (destfile);
끝;
제외하고
끝;
마지막으로
strm.free;
idgetmm.free;
끝;
끝;
절차 tform1.getmmthread (mmurl, destpath, subj : string);
시작하다
rgetmm : = tgetmm.create (mmurl, destpath, subj);
끝;
끝.