2011-10-18 3 views
3

뮤텍스가 구현 될 수 있다는 것을 알고 있지만 비디오 재생과 같이 다른 스레드를 일시 중지/다시 시작할 수있는 방법이 있을지 궁금합니다. 이 방법은 다른 실행중인 스레드가 복잡 할 때 프로그램하기가 쉽습니다.다른 스레드 일시 중지/다시 시작

+1

http://stackoverflow.com/questions/1606400/how-to-sleep-or-pause-a-pthread-in-c-on-linux가 도움이 될 수 있습니다. –

+0

프로그래밍하기가 더 쉽지만 올바른 것을 얻기가 어렵습니다. 훨씬 더 세게. 거의 불가능하다. 사실 ... – Nemo

답변

1

두 개의 프로세스가있는 경우 사용할 수있는 프로세스 일시 중지 신호가 있지만 신호에는 몇 가지 단점이 있으므로 사용하지 않는 것이 좋습니다. 제어되고 안정적인 방법으로 뮤텍스를 사용하여 직접해야합니다. 사용자가 재생을 일시 중지하면 뮤텍스를 잠그고 재생하는 스레드는 뮤텍스를 잠급니다. 이처럼 :

당신이 파이프처럼 표준 IPC 메커니즘을 사용할 수있는 두 개의 스레드 간의 이상의 통신을해야하는 경우
static pthread_mutex_t mutex; 

/* UI thread */ 
void g(void) 
{ 
    while(1) { 
     get_input(); 
     if(user_wants_to_pause) 
      pthread_mutex_lock(&mutex); 
     else if(user_wants_to_resume) 
      pthread_mutex_unlock(&mutex); 
    } 
} 

/* rendering thread */ 
void f(void) 
{ 
    while(1) { 
     pthread_mutex_lock(&mutex); 
     /* if we get here, the user hasn't paused */ 
     pthread_mutex_unlock(&mutex); 
     render_next_frame(); 
    } 
} 

- 당신이 다음 일시 중지하고 그 기반으로 및 재시작 구현할 수 있습니다.

관련 문제