작업이 완료되기 전에 스레드가 종료되는 것을 방지하는 방법은 무엇입니까?

Thunderx

10 개의 스레드가 함께 작동합니다. 스레드를 시작한 후 15 초 후 작업이 완료되기 전에 모든 스레드가 종료되고 하나의 스레드 만 남습니다.

내 코드 :

procedure TForm1.Button2Click(Sender: TObject);
begin
  AA;
  BB;
  CC;
  DD;
  EE;
  FF;
  GG;
  HH;
  II;
  JJ;
end;

procedure TForm1.AA;    //same procedure for BB,CC,DD,EE.FF,JJ,HH,II,JJ    
begin
  lHTTP := TIdHTTP.Create(nil);
  TTask.Create(Procedure

    try
      //HTTP Opertations 
    finally
    end;

  end).Start;
end;

참고 Free: AV를 받았는데 디버깅 방법을 모르기 때문에 HTTP 구성 요소를 사용할 수 없습니다 . 코드에서 올바르게 해제 할 위치는 어디입니까? 그러나 그것을 해제하지 않으면 코드는 잘 작동하지만 스레드는 종료됩니다. Dodge가 말했듯이 문제 일 수 있습니다.

제리 닷지

TIdHTTP구성 요소를 만드는 방법에 따르면 단순히 잘못되었습니다. 스레드 외부에서 객체를 생성하지 말고 스레드 내부에서 사용하면 안됩니다. 스레드로부터 안전하지 않습니다. 사용중인 곳과 동일한 스레드에서 만들어야합니다. 이것이 당신이 그것을 해제 할 수없는 이유입니다. 그래서 당신은 실제로 여기서 동시에 고쳐야 할 두 가지 문제가 있습니다.

또한 lHTTP변수가 코드 범위에 속하지 않는다는 것을 깨달았 으므로 일부 전역 (또는 공유) 위치에서 선언했다고 가정하겠습니다. 각 스레드에는 자체 인스턴스에 대한 자체 변수가 필요합니다.

따라서 코드는 다음과 같이 보일 것입니다.

procedure TForm1.AA;    //same procedure for BB,CC,DD,EE.FF,JJ,HH,II,JJ    
begin
  TTask.Create(Procedure
    var
      lHTTP: TIdHTTP;
    begin
      lHTTP := TIdHTTP.Create(nil);
      try
        //HTTP Opertations 
      finally
        lHTTP.Free;
      end;
    end).Start;
end;

다른 구성 요소 (예 TADOConnection:)는 이러한 작업을 시도하면 완전히 실패하고 충돌합니다 (이러한 구성 요소는 COM을 사용하기 때문에). 다행히도 TIdHTTPCOM을 사용하지 않지만 같은 이유로 디자인에 여전히 결함이 있습니다.


이제 디버깅했다고 말할 때 실제 스레드에서 코드를 디버깅했지만 중단 점이 끝에 도달하기 전에 코드의 다른 위치로 점프했음을 의미하는 것 같습니다. 이는 스레드에서 디버거를 사용할 때 예상됩니다. 스레드에 들어가서 각 순차적 중단 점이 동일한 스레드에있을 것으로 기대할 수는 없습니다. 즉, 다른 스레드에 중단 점이 두 개 이상있는 경우 디버거가 서로 점프 할 가능성이 매우 높습니다. , 그들은 여러 스레드입니다. 일종의 작업 로그를 만드는 것이 좋으며 각 스레드는 상태와 위치를보고합니다.

말 그대로 대체 우주와 같습니다. 여러 개의 서로 다른 유사한 스레드가 서로 약간 다른 작업을 수행합니다. 델파이 디버거는 단순히 모든 대체 우주를 볼 수있는 시간의 군주입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Windows 작업 관리자에서 앱이 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

백그라운드에서 앱이 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

요청을 완료하기 전에 Lambda 함수가 종료되는 이유는 무엇입니까?

분류에서Dev

Node.js 12 작업자 스레드가 즉시 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

일시적으로 조건이 충족되지 않을 때 스레드가 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

일시적으로 조건이 충족되지 않을 때 스레드가 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

비동기가 작업을 완료하기 전에 프로그램이 종료되는 이유는 무엇입니까?

분류에서Dev

모든 스레드가 완료되면 프로그램을 종료하는 방법은 무엇입니까?

분류에서Dev

별도의 스레드에서 작업이 완료되면 트리거하는 방법은 무엇입니까?

분류에서Dev

클릭 이벤트가 종료되기 전에 이미지를 추가하는 방법은 무엇입니까?

분류에서Dev

프로그램을 종료하기 전에 동시 ML 스레드가 완료 될 때까지 기다리는 방법은 무엇입니까?

분류에서Dev

쉘이 종료 될 때 백그라운드 작업이 종료되는지 또는 종료되는지 정확히 결정하는 것은 무엇입니까?

분류에서Dev

쉘이 종료 될 때 백그라운드 작업이 종료되는지 또는 종료되는지 정확히 결정하는 것은 무엇입니까?

분류에서Dev

쉘이 종료 될 때 백그라운드 작업이 종료되는지 또는 종료되는지 정확히 결정하는 것은 무엇입니까?

분류에서Dev

수명이 짧은 애플리케이션이 종료되기 전에 Logback을 완전히 압축하는 방법은 무엇입니까?

분류에서Dev

임베디드 IE 브라우저 : 탐색이 완료되기 전에 리디렉션을 감지하는 방법은 무엇입니까?

분류에서Dev

프로그램이 완료되기 전에 QML 창을 표시하는 방법은 무엇입니까?

분류에서Dev

Drone CI : Selenium을 사용하는 npm 스크립트 실행이 완료되기 전에 종료되는 이유는 무엇입니까?

분류에서Dev

비동기 HttpRequest가 완료되면 TextBlock을 업데이트하는 방법은 무엇입니까?

분류에서Dev

값을 반환하기 전에 다른 이벤트가 완료되기를 기다리는 방법은 무엇입니까?

분류에서Dev

지시문이 데이터로 초기화되기 전에 서비스의 $ http.get이 완료되는지 확인하는 방법은 무엇입니까?

분류에서Dev

에이전트가 Osbrain에서 작업을 완료했는지 확인하는 메서드를 작성하는 방법은 무엇입니까?

분류에서Dev

Xamarin Android를 사용하여 작업이 완료되기 전에 진행률 표시 줄을 표시하는 방법은 무엇입니까?

분류에서Dev

프로세스가 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

프로세스가 종료되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

파이썬의 멀티 스레딩에서 부모 작업이 완료 될 때까지 작업을 기다리는 방법은 무엇입니까?

분류에서Dev

Windows XP가 다시 시작되지 않을 때-진단 방법, 전원을 껐다 켜지 않고 종료하는 방법은 무엇입니까?

분류에서Dev

Ansible에서 문자열 읽기가 완료되면 프로세스를 종료하는 조건문을 생성하는 방법이 있습니까?

분류에서Dev

이 작업이 완료되기 전에 코드가 실행되는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    Windows 작업 관리자에서 앱이 종료되는 것을 방지하는 방법은 무엇입니까?

  2. 2

    백그라운드에서 앱이 종료되는 것을 방지하는 방법은 무엇입니까?

  3. 3

    요청을 완료하기 전에 Lambda 함수가 종료되는 이유는 무엇입니까?

  4. 4

    Node.js 12 작업자 스레드가 즉시 종료되는 것을 방지하는 방법은 무엇입니까?

  5. 5

    일시적으로 조건이 충족되지 않을 때 스레드가 종료되는 것을 방지하는 방법은 무엇입니까?

  6. 6

    일시적으로 조건이 충족되지 않을 때 스레드가 종료되는 것을 방지하는 방법은 무엇입니까?

  7. 7

    비동기가 작업을 완료하기 전에 프로그램이 종료되는 이유는 무엇입니까?

  8. 8

    모든 스레드가 완료되면 프로그램을 종료하는 방법은 무엇입니까?

  9. 9

    별도의 스레드에서 작업이 완료되면 트리거하는 방법은 무엇입니까?

  10. 10

    클릭 이벤트가 종료되기 전에 이미지를 추가하는 방법은 무엇입니까?

  11. 11

    프로그램을 종료하기 전에 동시 ML 스레드가 완료 될 때까지 기다리는 방법은 무엇입니까?

  12. 12

    쉘이 종료 될 때 백그라운드 작업이 종료되는지 또는 종료되는지 정확히 결정하는 것은 무엇입니까?

  13. 13

    쉘이 종료 될 때 백그라운드 작업이 종료되는지 또는 종료되는지 정확히 결정하는 것은 무엇입니까?

  14. 14

    쉘이 종료 될 때 백그라운드 작업이 종료되는지 또는 종료되는지 정확히 결정하는 것은 무엇입니까?

  15. 15

    수명이 짧은 애플리케이션이 종료되기 전에 Logback을 완전히 압축하는 방법은 무엇입니까?

  16. 16

    임베디드 IE 브라우저 : 탐색이 완료되기 전에 리디렉션을 감지하는 방법은 무엇입니까?

  17. 17

    프로그램이 완료되기 전에 QML 창을 표시하는 방법은 무엇입니까?

  18. 18

    Drone CI : Selenium을 사용하는 npm 스크립트 실행이 완료되기 전에 종료되는 이유는 무엇입니까?

  19. 19

    비동기 HttpRequest가 완료되면 TextBlock을 업데이트하는 방법은 무엇입니까?

  20. 20

    값을 반환하기 전에 다른 이벤트가 완료되기를 기다리는 방법은 무엇입니까?

  21. 21

    지시문이 데이터로 초기화되기 전에 서비스의 $ http.get이 완료되는지 확인하는 방법은 무엇입니까?

  22. 22

    에이전트가 Osbrain에서 작업을 완료했는지 확인하는 메서드를 작성하는 방법은 무엇입니까?

  23. 23

    Xamarin Android를 사용하여 작업이 완료되기 전에 진행률 표시 줄을 표시하는 방법은 무엇입니까?

  24. 24

    프로세스가 종료되는 것을 방지하는 방법은 무엇입니까?

  25. 25

    프로세스가 종료되는 것을 방지하는 방법은 무엇입니까?

  26. 26

    파이썬의 멀티 스레딩에서 부모 작업이 완료 될 때까지 작업을 기다리는 방법은 무엇입니까?

  27. 27

    Windows XP가 다시 시작되지 않을 때-진단 방법, 전원을 껐다 켜지 않고 종료하는 방법은 무엇입니까?

  28. 28

    Ansible에서 문자열 읽기가 완료되면 프로세스를 종료하는 조건문을 생성하는 방법이 있습니까?

  29. 29

    이 작업이 완료되기 전에 코드가 실행되는 이유는 무엇입니까?

뜨겁다태그

보관