2012-09-19 2 views
0

AfxBeginThread으로 새 스레드를 만듭니다. AfxExitThread 스레드를 종료하고 그냥 값을 반환하는 시도했다. 이 두 가지 모두 스레드를 종료하는 유효한 방법이라고 가정합니다.스레드가 종료되었는지 확인

그러나 GetExitCodeThread으로 전화를 걸면 몇 시간 후에도 STILL_ACTIVE이됩니다. 또한 (WaitForSingleObject(ahtRespondThreads[i], 0) == WAIT_OBJECT_0)을 사용할 때 스레드 객체가 여전히 유효 함을 보여줍니다.

스레드가 실제로 종료되었는지 여부는 어떻게 알 수 있습니까? 네, 함수가 종료되기 전에 변수를 설정할 수는 있지만 함수가 종료되었거나 유효한 스레드가 아님을 알기 위해 스레드 핸들을 쿼리 할 수 ​​있어야한다고 생각합니다.

답변

3

WaitForSingleObject()은 거짓말이 아니므로 스레드가 여전히 활성 상태임을 나타내면 실제로 스레드는 여전히 활성 상태이며 아직 제어 기능을 종료하지 않았습니다. 함수에서 버그를 확인하여 예상 할 때 실제로 종료되는지 확인하십시오.

0

두 가지 방법 모두 작동해야합니다. 내가 놓친 버그에 대한 코드도 확인하고, 다른 문서 here을 만났을 때 도움이 될 것입니다. 노트의

포인트 :

내가 스레드를 종료하려면 알고있는 가장 좋은 방법은 스레드가 무기한 잠을하지 않도록하는 것입니다. 그것이 작업을 완료하면 변수를 확인합니다. 종료할지 여부를 알려줍니다.

  1. 플래그 설정
  2. 작업이 완료 될 경우 잠 깨우기 실
  3. 체크 볼 경우
  4. 청소 자원
  5. 종료
관련 문제