2012-03-22 2 views
2

나는 분석 애플 리케이션을 연구 중이다. Java.At 맨 위에는 시작 및 중지 Buttons.On이있는 GUI가 있습니다. 시작을 클릭하면 내부적으로 Thread.i.e를 만드는 API 메서드를 호출하는 RUN 메서드의 내부에서 스레드를 만듭니다. 스레드가 양산되는 -----> "시작"을 클릭에다중 스레드 - 스레드 및 모든 하위 프로세스의 종료

---->이 스레드의 실행 방법에 내가 지금 내부적으로 스레드를 생성하는 API 칼 ...

을 사용하여 내가 원하는 경우 중지 GUI 단추를 클릭하면 API 호출에 의해 만들어진 내부 스레드도 죽어야합니다 ..

내가 어떻게 달성 할 수 있습니까 ??

감사합니다.

+1

API가 스레드를 중지/중지 할 수있는 방법을 제공합니까? –

+0

Naah, 그렇게 생각하지 않아요 ... – nikel

+0

모든 내부 스레드에 대해 하나의 명시적인 스레드 종료 방법이 있습니다. :) – nikel

답변

2

일부 논리는 스레드 클래스에 구현해야합니다. 첫째, 그들은 "킬 스위치 (kill switch)"가 필요합니다. 외부에서 그들을 막을 수는 없습니다. 일반적으로 스레드 인스턴스에 플래그를 정의하고 설정하여 종료해야하는 시점을 알 수 있습니다.

그런 다음 "계층 구조"스레드가 없습니다. 스레드 인스턴스는 하위 스레드의 자체 목록이 필요하며, 부모 (부모)가 정지 신호를 받으면 자식에게 동일한 신호를 보내야합니다.

public abstract class MyThread extends Thread { 

    private List<MyThread> children = new ArrayList<MyThread>(); 
    private boolean stopNow = false; // <- this is the stop flag 

    public void stopNow() { 
    for (MyThread thread:children) { 
     thread.stopNow(); 
    } 
    stopNow = true; 
    } 
} 

(이것은 우리가 run 방법에 stopNow 플래그를 "감시"할 것이다, 스레드가 실제로 중지하지 않습니다).

+0

하지만 내 문제는 해당 스레드에 대한 참조를 확보 할 수 없다는 것입니다. 내부적으로 생성됩니다. API 호출에 의해. – nikel

+0

그러면 정말 문제가됩니다. –

+0

스레드가 수행하는 작업, API 호출에서 전달되는 작업은 무엇입니까? 어쩌면 당신은 '숨겨진'내부 스레드를 예외/실패로 변경시킬 수 있습니다. –

관련 문제