디버깅하는 동안 출력 창에서 스레드 종료 코드는 정확히 무엇입니까? 어떤 정보를 제공합니까? 그것은 어떻게 든 유용하거나 나를 괴롭히지 않아야하는 내부적 인 것입니까?
The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).
중요성과 함께 가능한 종료 코드 목록이 있습니까?
디버깅하는 동안 출력 창에서 스레드 종료 코드는 정확히 무엇입니까? 어떤 정보를 제공합니까? 그것은 어떻게 든 유용하거나 나를 괴롭히지 않아야하는 내부적 인 것입니까?
The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).
중요성과 함께 가능한 종료 코드 목록이 있습니까?
답변:
실제로 종료 코드가 스레드가 종료 방법에 대한 표시를 제공하는 데 사용되는 가정되는하지만 분명히이 주제에 대한 설명을 많이있을하지 않는 것, 0
아무것도 그것을 didn를 의미하는 경향이 동안 안전하게 종료 것을 의미하는 경향이있다 예상대로 종료하지 마십시오. 그러나이 종료 코드를 코드에 직접 설정하여이를 완전히 간과 할 수 있습니다.
더 많은 정보를 얻을 수있는 가장 가까운 링크는 다음과 같습니다.
위 링크에서 인용 :
종료 방법이 무엇이든 프로세스 또는 스레드에서 반환하는 정수는 0-255 (8 비트) 값이어야합니다. 0 값은 성공을 나타내고 0이 아닌 값은 실패를 나타냅니다. 모든 정수 값을 종료 코드로 반환 할 수 있지만 정수의 가장 낮은 바이트 만 종료 코드의 일부로 프로세스 또는 스레드에서 반환됩니다. 상위 바이트는 운영 체제에서 프로세스에 대한 특수 정보를 전달하는 데 사용됩니다. 종료 코드는 하나의 성공 또는 실패에 따라 다른 프로그램을 조건부로 실행하는 배치 / 쉘 프로그램에서 매우 유용합니다.
GetEXitCodeThread에 대한 문서에서
중요 GetExitCodeThread 함수는 스레드가 종료 된 후에 만 응용 프로그램에서 정의한 유효한 오류 코드를 반환합니다. 따라서 응용 프로그램은 STILL_ACTIVE (259)를 오류 코드로 사용해서는 안됩니다. 스레드가 STILL_ACTIVE (259) 를 오류 코드로 반환하면 이 값을 테스트하는 응용 프로그램은 스레드가 아직 실행 중임을 의미하는 것으로 해석하고 스레드가 종료 된 후에도 스레드 완료를 계속 테스트 할 수 있습니다. 무한 루프에 응용 프로그램.
이 모든 것에 대한 나의 이해는 자신의 응용 프로그램 에서 자신의 응용 프로그램 내에서 스레드를 사용하는 경우 종료 코드가 그다지 중요하지 않다는 것입니다 . 이에 대한 예외는 서로 종속성이있는 두 개의 스레드를 동시에 실행하는 경우 일 수 있습니다. 외부 소스에서이 오류 코드를 읽어야하는 경우 다른 응용 프로그램이 스레드의 상태를 알 수 있도록 설정할 수 있습니다.
RunAsync().Wait();
static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }
가 있습니다. 스레드는 단순히 다음 작업에 할당되기를 기다리는 스레드 풀로 돌아갑니다. 이것이 바로 여기서 종료 코드 STILL_ACTIVE (259)가 매우 직관적으로 들리는 이유입니다.
Sayse가 언급했듯이 종료 코드 259 (0x103)
에는 특별한 의미가 있습니다.이 경우 디버깅중인 프로세스가 여전히 실행 중입니다.
스레드는 각 웹 서비스 호출을 실행 한 후에도 계속 실행되기 때문에 웹 서비스 디버깅에서 이것을 많이 보았습니다 (여전히 추가 호출을 수신 중이므로).