[c#] 스레드 종료 코드 란 무엇입니까?

디버깅하는 동안 출력 창에서 스레드 종료 코드는 정확히 무엇입니까? 어떤 정보를 제공합니까? 그것은 어떻게 든 유용하거나 나를 괴롭히지 않아야하는 내부적 인 것입니까?

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) 를 오류 코드로 반환하면 이 값을 테스트하는 응용 프로그램은 스레드가 아직 실행 중임을 의미하는 것으로 해석하고 스레드가 종료 된 후에도 스레드 완료를 계속 테스트 할 수 있습니다. 무한 루프에 응용 프로그램.


이 모든 것에 대한 나의 이해는 자신의 응용 프로그램 에서 자신의 응용 프로그램 내에서 스레드를 사용하는 경우 종료 코드가 그다지 중요하지 않다는 것입니다 . 이에 대한 예외는 서로 종속성이있는 두 개의 스레드를 동시에 실행하는 경우 일 수 있습니다. 외부 소스에서이 오류 코드를 읽어야하는 경우 다른 응용 프로그램이 스레드의 상태를 알 수 있도록 설정할 수 있습니다.


답변

Sayse가 언급했듯이 종료 코드 259 (0x103)에는 특별한 의미가 있습니다.이 경우 디버깅중인 프로세스가 여전히 실행 중입니다.

스레드는 각 웹 서비스 호출을 실행 한 후에도 계속 실행되기 때문에 웹 서비스 디버깅에서 이것을 많이 보았습니다 (여전히 추가 호출을 수신 중이므로).


답변

나에게 일어난 일은 내 솔루션에 여러 프로젝트가 있다는 것입니다. 프로젝트 1을 디버그하려고했지만 프로젝트 2가 기본 시작 프로젝트로 설정되었습니다. 이 문제를 해결하고 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 “시작 프로젝트로 설정”을 선택한 다음 디버깅을 실행하는 것이 좋습니다.


답변