2010-03-15 5 views
5

잠재적으로 호출 스택 손상을 일으킬 수있는 코드를 실행중인 응용 프로그램에 스레드가 있습니다 (내 응용 프로그램은 DLL 테스트 도구입니다).호출 스택이 손상된 .NET 스레드를 어떻게 종료합니까?

자식 스레드가 오작동을하는지 여부를 감지하는 방법이 있다고 가정하면 어떻게 종료합니까? 내가 읽은 것에서, 오작동하는 쓰레드에 대해 Thread.Abort()를 호출하는 것은 그 안의 예외를 발생시키는 것과 같습니다. 나는 스레드의 호출 스택이 손상 될 수 있다는 가정하에 좋은 생각이 아닌가하는 두려움이 있습니다. 제안 사항이 있습니까?

+0

절대 발생하지 않아야하므로 코드를 다시 작성해야합니다. – ChaosPandion

+1

내가 말했듯이, 나는 테스트 도구를 만들기 위해 노력하고 있으므로, 나는 테스트중인 모든 dll 함수가 잠재적으로 위험하다고 가정해야한다. –

+1

다시 한번 독서가 실패했습니다. 내 사과. – ChaosPandion

답변

6

프로세스를 손상시킬 수있는 신뢰할 수없는 코드를 실행하는 경우 해당 코드를 별도의 프로세스에서 실행하고 프로세스 간 통신을 사용하여 해당 프로세스와 통신하십시오. 신뢰할 수없는 코드를 일찍 종료하려면 프로세스를 중지하면됩니다.

+1

갑자기 그 Monzy 노래 "Kill dash nine"이 내 머리에 찔 렸습니다. –

+0

http://www.monzy.com/intro/killdashnine_lyrics.html –

3

코드가 잘못되었을 경우 의 모든 내용이 일 수 있으며 모든 스레드의 모든 프로세스에 영향을 미칠 수 있습니다.

신뢰할 수있는 솔루션은 신뢰할 수없는 코드를 별도의 프로세스에서 실행 한 다음 오작동하는 경우 프로세스를 종료하는 것입니다.

+0

항상 죽이는 것입니다. 당신 자신의 스레드에서 그것을 실행하는 것은 명백하게 아무 것도 할 수있는 신뢰할 수없는 종료 자 덕분에 위험하고 신뢰성이 떨어질 것입니다 ... – luckyluke

3

로드 DLL 거기 AppDomain.DoCallBack 방법을 사용하여에서 DLL의 코드를 실행합니다.

0

accept 대답 외에도 Thread.Abort를 무시하는 것이 쉽다는 점을 추가하고 싶습니다.

try 
{ 
    ... 
} 
catch (ThreadAbortException) 
{ 
    Thread.ResetAbort(); 
} 
관련 문제