2011-01-13 11 views
1

스레드 종료를 알리는 이벤트 (::CreateEvent(...)으로 생성)를 사용하는 경우 스레드를 종료하거나 이벤트 핸들 (::CloseHandle(...))을 닫기 전에 해당 이벤트 (::ResetEvent(...))를 재설정해야합니까? 또는 스레드가 다시 시작될 가능성이있는 경우 좋은 방법입니까? 이것은 Windows 환경을위한 것입니다. 감사.스레드 종료 이벤트 - C++

+0

구체적으로 작성하십시오. 나는. 일부 코드가 도움이 될 것입니다. 내가 제공 한 정보를 제공하는 좋은 습관은 이벤트가 더 이상 필요 없게되는 즉시 CloseHandle이 이벤트 핸들러에서 호출되고 이후에 이벤트를 사용하지 않도록해야한다는 것입니다 – ds27680

답변

2

사용하는 이벤트의 의미에 따라 다릅니다.

이벤트를 사용하여 둘 이상의 스레드를 종료하는 경우, 각 스레드에서 이벤트를 재설정하면 안됩니다. 하나의 쓰레드 만 죽이기 위해서이 메소드를 사용한다면, 다시 한번 더 많은 의미론에 의존한다. 이벤트가 다른 스레드에 다른 것들을 알리는 데 사용되면 다이빙 스레드에서 이벤트를 재설정해야합니다. 그렇지 않으면 이벤트가 단일 스레드가 죽을 것이라는 신호 만 보내고 다른 이벤트는없는 경우 이벤트를 재설정 할 수 있습니다. 이벤트의 신호로 인해 다른 어떤 것도 일어나지 않습니다.

리소스 누출을 방지하기 위해 이벤트를 다시 설정하지 않아도됩니다. 당신이해야 할 일은 CloseHandle()

3

재설정 이벤트를 호출 할 필요가 없습니다. 핸들을 닫으면 해당 이벤트가 더 이상 유효하지 않으므로 재설정 이벤트를 호출 할 필요가 없습니다.

0

핸들을 닫기 전에 이벤트의 설정 상태를 뒤집을 필요가 없습니다. 더 자세히 설명하기 위해 이벤트의 설정 상태는 이벤트의 설정 상태와 관련이 없습니다. 당신이 알고있는 것처럼, CreateEvent (...) 함수는 이벤트의 초기 상태를 설정할 수있게합니다. 그래서 당신이 그것을 초기화로 설정한다면 CloseHandle() 전에 설정해야할까요? 아니 물론, 설정 상태는 완전히 중요하지 않습니다. 클래스 멤버를 파기하기 전에 클래스 멤버를 시작 상태로 재설정하는 것과 비슷합니다.