2011-01-14 9 views
2

몇 분마다 비동기 적으로 작업을 실행하는 Windows 서비스가 있습니다. 때로는 Windows 서비스가 실행되고 이전 작업이 완료되지 않았습니다. 스레딩을 사용하면 새 작업을 대기열에 두는 방법이 있습니다. 첫 번째 작업이 끝나면 실행을 시작하지 않습니까?C에서 스레드의 대기 실행

+1

마치 그들이 완료 할 수있는 것보다 더 빨리 대기중인 경우 작업의 백 로그가 무한히 증가하지 않도록주의해야합니다. 대기열의 최대 숫자가 어딘가에 있는지 확인하십시오 (예를 들어 하나만!). 또는 쉬운 방법을 사용하여 이전 작업이있는 경우 새로운 작업 시작을 방지하십시오. –

답변

5

사용자 고유의 생산자/작업 큐를 만들 수 있습니다. 사실상 단일 스레드 스레드 풀입니다.

BlockingCollection<T>을 사용하면 .NET 4에서 쉽게 수행 할 수 있습니다. 그 전에는 조금이 더 까다 롭지 만 이 아닙니다.

+0

불행히도 3.5를 사용하고 있습니까 3.5에 대한 예제 링크가 있습니까? 감사합니다 – ryudice

+0

@ryudice : 여기에 몇 가지 샘플 코드가 있습니다 : http://stackoverflow.com/questions/530211/creating-a-blocking-queuet-in-net/530228#530228 –

+0

@ 존 : 3.5, OP 사용 작업해야합니다 Parallel Lib,'cancelToken.IsCancellationRequested'를 확인하고 작업을 대기열에 저장 또는 List 작업이 현재 사용 중입니까? – IAbstract

0

주 제어 서비스에서 대기열을 구현해야합니다. 스레드 완료 및/또는 주기적으로 대기열을 확인하고 다음 작업을 시작할 수 있습니다.

관련 문제