나는 초보자 인 Multithreading
입니다. indy를 사용하여 일련의 작업을 수행하는 절차가 있습니다 (로그인 사이트에 다운로드하고 파일을 다운로드하는 등 ...). 때로는 사이트가 응답하지 않거나 너무 오래 걸릴 때 idHttp.connectTimeout
및 idHttp.readTimeout
이 특정 금액으로 설정되거나 예외적으로 발생하지 않는 경우도 있습니다. 지정된 !! !! 그래서 내가 작업을 확인하고 예를 들어 ITask
이 30 초 동안 실행 중인지 확인하는 것이 좋습니다. 종료해야합니다! itask.cancel
을 사용해 보았지만 대기열에 있고 종료되지 않는 경우에만 취소합니다. 이미 실행중인 작업, 내 문제의 해결 방법은 무엇입니까?System.threading을 사용하여 특정 시간 동안 실행 된 경우 이미 시작된 iTask를 확인하고 종료하는 방법
은 그래서 당신이 내 프로그램에서 무슨 일이 일어나고 있는지 알고 : 원래 내 프로그램 프로파일 목록을 기반으로 클래스를 생성하고 로그인 및 다운로드 프로세스를 시작
, 내가 이상 소요 어떤 startDownloadProcess
을 종료하려면 내가 무엇이 필요
// this is what i used to do
for I := 0 to mProfileList.count - 1 do
begin
myClass := TMyClass.create(mProfileList[i]);
//sometimes this takes a very very long time and i don't want that.
myClass.startDownloadProcess;
end;
// here is what i have in mind
for I := 0 to mProfileList.count - 1 do
begin
mITaskArray[i] := TTask.run(procedure
begin
myClass := TMyClass.create(mProfileList[i]);
myClass.startDownloadProcess;
end);
end;
: 30 초 여기
보다 코드 예제
각 작업이 이전 작업 (대기열)에 종속되어 이전 작업이 완료 될 때까지 대기하고 작업에 30 초 이상이 걸리면 작업이 종료되고 대기열이 계속됩니다.
이제 코드에 문제가 많을 수도 있지만 그 이유는 여기에 있습니다. 진행 방법에 대해 약간 분실되었거나 내가하고있는 일이 전혀 잘못되었습니다!
당신은 정기적으로 작업 내부 확인해야합니다 TAnonymousThread :'경우 TTask.CurrentTask.Status = TTaskStatus.Canceled 후 종료,' –
@LURD하지만 작업이 한 번만 실행되지 않습니다 ?, 만약 그렇다면 어떻게하면 라인 (예 : IdHttp.get())에 갇혀있어 상태를 확인할 수 있습니다; –
외부에서 작업 및 스레드를 종료 할 수 없습니다. 협조 할 필요가 있습니다. 프로세스를 종료 할 수 있습니다. –