2014-09-29 7 views
0

표준 C++ (플랫폼 특정 API 없음) 만 사용하여 즉시 완료되거나 시간 초과 될 수있는 외부 응용 프로그램을 시작하려고합니다. 응용 프로그램이 중단되면 내 응용 프로그램은 응용 프로그램을 종료하고 다시 실행하기 만하면 시간 초과가 발생합니다.다른 스레드에서 하나의 스레드가 종료 됨

지금, 아래로 본격 비교에, 나는 두 개의 스레드를 시작하려고 :

  • 첫 번째 스레드 응용 프로그램을 실행하고 첫 번째 경우
  • 초 스레드 몇 초 동안 대기 및 검사를 종료 할 때까지 기다립니다
      스레드가 종료되었습니다. 만약 그렇지 않다면, 그것을 멈춘 것으로 간주합니다.

    질문 : 두 번째 스레드의 첫 번째 스레드를 어떻게 종료합니까? 앱을 시작하는 방법은 system() 함수를 사용하는 것입니다. 동기식이므로 종료를 원할 경우 해당 스레드에서 확인할 수있는 방법이 없습니다. 그것은 외부 적으로 어떻게 든 강제로 강요되어야합니다. 이것이 가능하지 않은 경우

    이 : 제대로? 7

    P.S을 수행하는 방법, 그리고 나는, 나는 단순히 더 이상 스레드를 기다릴하지 않으되지 않는다 생각한다. 단순히 백그라운드에서 멈추게 될 수 있습니다. 어떻게해야합니까? (현재, join()와 함께 해당 스레드를 기다리고 있습니다)

  • +0

    'system()'을 사용하여 시작한 프로세스를 종료 할 수있는 휴대용 방법이 있다면 놀랄 것입니다. – NPE

    +0

    나는 그 과정을 죽이고 싶지 않다. 프로세스를 시작한 스레드가 그만두 기 때문에 그렇게 할 수는 있습니다. 그래서 하루가 끝나면 몇 가지 프로세스가 멈추지 만 문제는 없습니다. –

    +1

    첫 번째 단락에서 하위 프로세스를 종료하는 방법을 명시 적으로 요청했습니다. 스레드를 죽이는 것에 관해서는, 당신은 어떤 스레드 라이브러리를 사용하고 있습니까? C++ 11'std :: thread' 또는 다른 것? – Useless

    답변

    1

    다른 스레드를 강제로 종료 할 수 없습니다. 정중하게 끝내라고 부탁 할 수 있습니다. 이것은 C++ 및 POSIX 스레드 모델에서 유지됩니다. Windows에는 TerminateThread가 있지만 실제로는 사용할 수 없으므로 매우 위험합니다. POSIX에는 pthread_cancel이 있습니다. 그게 협동 귀하의 청구서에 맞는 수도 있지만, 거기에 표준 C + + 이에 상응하는 사람이야.

    어떤 식 으로든 스레드를 종료하더라도 아무런 프로그램도 실행하지 않고 system을 통해 시작했을 수 있습니다.

    스레드가 join에 대한 의무없이 무료로 전환되게하려면 thread::detach()을 사용하십시오.

    +1

    답변에 대한 사이드 노트 : 상대적으로 안전하게 ** 종료하려면 ** 업무가 번거로 웠던 일, 즉무한 루프 또는 무한 대기로 빠지며 정중 한 질문에 응답하지 않는 유일한 옵션은 별도의 프로세스 **에서 해당 작업을 실행하는 것입니다. 이렇게 분리 된 프로세스는 쓰레드와 마찬가지로 우선 중지, 재개, 우선 순위를 부여 할 수 있으며 또한 마스터 프로세스에 아무런 위험 부담없이 ** kill **을 수행 할 수 있습니다. 물론, IPC는 스레드와 이야기하는 것보다 훨씬 느립니다. – quetzalcoatl

    +0

    @quetzalcoatl 사실이지만 OP는 표준 C++ 솔루션에 관심이 있습니다. –

    +0

    네, 그게 단지 의견 일 뿐이에요, 영업부는 작업/스레드 종료를 요청했습니다. 당신이 말한대로 큰 일도 아니고, 어떻게 안전하게 끝낼 수 있는지 메모를했습니다. 어쩌면 다른 사람에게 도움이 될 수도 있습니다. OP가 그것을 무시하면. – quetzalcoatl

    관련 문제