2012-02-01 4 views
0

웹 서비스에서 데이터를 폴링 한 다음 데이터를 처리하기 위해 다른 클래스로 보내는 스레드가 있습니다. 이 데이터의 프로세스는 스레드 내부에서 폴링 기능을 호출하는 타이머 간격보다 긴 시간이 걸릴 수 있습니다.
데이터 폴링 기능을 보호하고 싶습니다. 즉, 데이터 처리가 진행되는 동안 기능을 입력하지 마십시오.스레드 내부 기능에서 (mutex, readwritelock ..) 사용할 보호 방법

내 흐름은 난 당신이 적어도 2 개 스레드를 사용하는 가정이

workerThread -> start timer -> that invoking the polling method -> 
the polling method gets the data and send it to processing > mean while this polling function can be called again . 

답변

1

투표소 기능은 함수 구현에 비해 폴링 타이머보다 실행하는 데 시간이 더 오래 걸리는 경우 뮤텍스를

void pollingFunction() { 

    bool isLocked = mutex.tryLock(3000); //timeout if you want 
    if(isLocked) 
    { 
     //process the data 
    } 
    else 
    { 
     return; 
    } 

    mutex.unlock(); 
} 
0

같다. 하나는 타이머에 의해 트리거되고, 다른 하나는 폴링 데이터를 처리합니다. 그래서 Monitor Object 패턴이 작동한다면 폴링 데이터를위한 큐를 정의하고 2 개의 조건 변수를 정의해야한다. 가득 차 있지 않으면 폴링을 시작한 다음 데이터를 큐에 넣을 수 있습니다. 비어 있지 않으면 처리가 데이터를 retieve 처리 할 수 ​​있습니다.

+0

없이 타이머를 잠글 시도 할 수는 폴링 스레드 내부 – user63898