2013-04-09 5 views
2

정말 간단하지만 중요한 질문 TIdThreadComponent 관련된 :어떤 스레드에서 TIdThreadComponent OnTerminate 및 OnStopped가 실행됩니까?

하는 스레드에서 OnTerminateOnStopped가 실행되는

- 주 스레드 또는 작업자 스레드를?

이러한 이벤트에있을 때 (그리고 VCL 속성 및 메서드 호출시) 주 스레드에 있다고 가정 할 수 있습니까?

업데이트 :은 내가 디버거를 사용할 수있는 패턴 및 OnStopped는 작업자 스레드 내에 및 OnTerminate는 메인 스레드 내부처럼 그 시도 후 보인다. 추가적인 이점은 디버거가 스레드 시작/중지/제어를위한 다른 관련 기능이 실행되는 위치를 결정하고 가능한 버그를 줄이는 데 도움이 될 수 있다는 것입니다.

+5

GetCurrentThreadID를 사용하여 현재 ThreadContext를 판별하고 MainThreadID와 비교할 수 있습니다. o) –

+0

예, 나중에도이를 수행했습니다. 유용한 조언. – Coder12345

답변

7

귀하의 관찰 내용이 정확합니다. OnStopped은 작업자 스레드의 컨텍스트에서 트리거됩니다. OnTerminated은 주 스레드의 컨텍스트에서 트리거됩니다.

관련 문제