2012-04-05 7 views
1

런타임에 예외를 잡은 스레드의 스택 추적을 인쇄 할 수 있습니다. 또한 동일한 프로세스 내에서 실행되는 다른 스레드 추적을 인쇄해야합니다. 한 스레드에서 예외가 잡히자 마자 모든 스레드를 정지시키는 좋은 방법을 찾는데 관심이 있습니다.하나의 스레드가 예외를 만났을 때 모든 스레드를 멈출 수 있습니까?

지금 내가 할 수있는 것은 각각의 활성 스레드에 대한 쿼리와 SuspendThread()입니다. 그러나 이로 인해 초기 예외가 잡히면 각 스레드가 조금 더 오래 실행됩니다. 즉각적으로 모든 스레드를 일시 중단시키는 방법이 있습니까?

감사합니다.

+1

충돌 보고서로 프로세스를 종료 하시겠습니까? 다른 스레드로 보내는 신호의 종류는 시간이 걸릴 것입니다. 나는 진짜 질문이 당신의 목적을위한 것이라고 생각합니다. 즉각적인 것으로 자격을 얻는 것과 어떻게 그 신호를 빨리 얻을 수 있습니까? –

+2

OS에 대해서조차도 "즉각적"이라고 생각하지 않습니다 ... 예를 들어, 멀티 코어/멀티 프로세서 시스템에서 코어 # 1의 스레드가 충돌했을 때 코어 # 2가 스레드를 중지하는 것을 어떻게 알 수 있습니까? 코어 # 1은 "의심스러운 스레드"메시지를 코어 # 2로 보내야합니다.이 때 코어 # 2의 스레드가 이미 더 많은 명령어를 실행했을 것입니다. –

+0

응용 프로그램의 구조에 따라 스레드 대신 파이버를 사용할 수 있습니다. (물론 릴리스 버전에서는이 작업을 원하지 않지만 디버깅에는 문제가 없을 수 있습니다.) –

답변

2

잡히지 않은 작업자 스레드의 GUI 스레드에 PostMessage()를 사용하려고 했습니까?

제안으로

간단한 단계 :에 작업자 스레드를 나머지
1) GUI 스레드가 산란 몇 작업자 스레드
2) 작업자 스레드를 PostMessage()를 한 번 잡은 예외
3) GUI 스레드받을 메시지
4) GUI 스레드 지시합니다

주를 일시 중단 :이 방법으로 당신의 자신의 메시지를

을 정의, 당신은 여전히 ​​당신의 작업자 스레드를 일시 중단하기 전에 약간의 지연을 볼 수 있습니다.

다른 방법으로 작업 스레드와 같은 이벤트 핸들과 같은 동기화 개체를 사용하는 것입니다.

관련 문제