2013-05-22 3 views
0

현재 WinAPI를 사용하고 있으며 스레드를 진행했습니다. 내 프로그램에는 서로 작동하는 스레드가 n 있습니다. 하나의 메인 스레드가 있습니다. 스레드는 특정 메모리 위치에 일부 데이터를 쓰고 특정 메모리 위치에서 작동하는 스레드가 데이터를 처리 할 때까지 대기합니다. 그런 다음 모든 절차가 스레드를 종료하지 않고 다시 반복됩니다.다른 스레드를 계속 실행하십시오.

제 문제는 두 번째 스레드가 너무 많은 시간을 낭비하는 것을 기다리고 있습니다. 현재 스레드를 일시 중단하거나 (스레드를 실행하는 데 시간을두고) 다른 방법으로이 문제를 해결할 수있는 방법이 있습니까?

도와주세요.

+0

WaitForMultipleObjects [여기] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025 (v = vs.85) .aspx)? – neagoegab

+0

어떻게 작동합니까? – user35443

+0

기본 스레드가 작업자를 폴링합니까? 그렇다면 [Event] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682655(v=vs.85).aspx) 나 [Semaphore]와 같은 동기화 개체를 사용하십시오. (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685129(v=vs.85).aspx) – simonc

답변

1

현재 주 스레드에서 폴링 중이거나 바쁜 상태이며 작업자 스레드에서 설정할 완료 플래그의 상태를 지속적으로 확인하고 있습니다. 참고로, 이것은 작업자가 완료되기를 기다리는 CPU 대역폭의 일부 비율을 사용함에 따라 바람직하지 않습니다. 경우에 따라 직원의 근무 시간이 단축되어 업무가 지연 될 수 있습니다.

대신 작업자가 완료를 알릴 때까지 Event 또는 Semaphore과 같은 동기화 개체를 사용하여 주 스레드를 잠자기 상태로 설정할 수 있습니다.

1

동기화를 위해 뮤텍스, 세마포어 이벤트 등의 동기화 개체를 사용할 수 있으며 스레드 대기를 위해 WaitForSingleObject/WaitForMultipleObject API를 사용할 수 있습니다.

관련 문제