2014-10-24 2 views
1

Windows 서비스가 있고 주 스레드가 작업을 수행 할 여러 자식 스레드를 생성합니다. Main 스레드는 이름별로 이러한 스레드 목록을 유지 관리합니다. 하위가 완료되면 주 스레드가 목록에서이를 제거합니다. Main은 타이머를 사용하여 자식 스레드가 아직 실행 중이 아닌 경우 주기적으로 시작합니다 (목록을 확인하여). 스레드는 "실행 및 삭제"스레드로 시작됩니다. 가끔씩 자식 스레드가 멈추거나 아주 오랜 시간이 걸릴 수 있습니다. 하지만 내 메인 스레드는 알 방법이 없습니다. 메인 스레드가 자식 스레드를 "호출"하고 "무엇을하고 있습니까?"라고 묻길 원합니다. 그리고 아이가 대답하면 나는 그가 매달린 것을 안다.실행중인 스레드 호출 C#

몇 가지 작은 행동을 수행 한 때마다, 자식 thread가 현재의 UTC 시간 변수를 업데이트합니다

+2

여기서 [TPL] (http://msdn.microsoft.com/en-us/library/dd460717(v=vs.110) .aspx)을 활용하지 않은 이유는 무엇입니까? – James

+0

여기에 당신의 목표는 무엇입니까? C#에는 스레드를 관리하는 데 도움이되는 많은 멀티 스레드 도구가 있습니다. – Gusdor

+1

C#의 각 스레드는'ThreadState' 속성을 가지고 있습니다. 상태가 '실행 중'인지 확인하지 않는 이유는 무엇입니까? – nrofis

답변

3

당신은 하트 비트를 사용할 수 있습니다. 각 스레드 (또는 동시 사전)에 대해 하나의 변수 (properly locked)가 필요합니다.

주 스레드는 정기적으로 해당 하트 비트를 확인합니다. 하트 비트가 주어진 시간보다 오래되면, 메인 스레드는 자식 스레드의 일부 동작이 걸릴 시간보다 훨씬 오래 걸린다는 것을 알고 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나의 초기 솔루션은 비슷한 것이었다.함수 호출이나 다른 스레드 간 통신 메커니즘을 만드는 방법이 있는지 궁금해했습니다.하지만 현재 가지고있는 모델을 사용하는 것이 가장 좋은 해결책 일 것입니다. – flapster

관련 문제