2012-07-24 2 views
0

보조 스레드에 h: TIdHTTP 구성 요소가 있으며 URL에서 헤더를 가져옵니다. 동시에 사용자가 취소를 클릭하면 주 스레드가 실제로 Indy 구성 요소의 연결을 해제하려고 시도합니다. 메인 스레드에서 thrd.h.Disconnect으로 전화해도 안전한가요? (h:TIdHTTP은 공개로 선언되었으므로 기본 스레드 내에서 액세스 가능)언제 TIdTCPConnection.Disconnect를 호출해도 안전합니까?

언제든지 안전하게 사용할 수 있다면 메인 스레드가 직접 호출 할 수있는 스레드에 Cancel 함수를 쓸 수 있습니까? 소켓은 그 아래에서 찢어 때

답변

2

예, 작업 스레드가 동일한 소켓을 통해 데이터를 읽거나 쓰는 동안 주 스레드가 소켓에서 Disconnect()을 호출 할 수 있습니다. 읽기/쓰기 작업은 스레드가 필요에 따라 catch하거나 무시할 수 있다는 예외를 발생시킵니다.

이벤트 처리기를 TIdHTTP.OnWork 이벤트에 할당하고 스레드가 종료되는 경우 SysUtils.Abort()과 같이 예외를 발생시킬 수도 있습니다.

2

당신이 '안전'가 무엇을 의미하는지에 따라 달라집니다 사전에

감사합니다 :)이 TidHTTP는 보조 스레드에서 예외를 발생합니다. 그것을 잡아서 다루거나 (로그하거나 표시하거나 그냥 무시하면) 괜찮을 것입니다.

스레드/소켓/어떤 개체의 '취소'방법도 괜찮습니다. 그런 다음 TidHTTP 구성 요소를 비공개 필드로 유지할 수 있습니다.

관련 문제