2011-10-18 234 views
3

我知道互斥鎖可以是一個實現,但我想知道會有一種方法來暫停/恢復視頻播放中的另一個線程。當其他運行線程複雜時,這種方法更容易編程。暫停/恢復另一個線程

+1

http://stackoverflow.com/questions/1606400/how-to-sleep-or-pause-a-pthread-in-c-on-linux可能會幫助你 –

+0

它可能更容易編程,但它是很難得到正確的。更難了。幾乎不可能,事實上...... – Nemo

回答

1

SIGTSTP,暫停進程的信號,如果您有兩個進程,您可以使用它,但信號有幾個缺點,所以我不建議使用它們。對於一種受控穩定的方法,您必須使用互斥鎖自己完成,用戶暫停回放會導致鎖定互斥鎖,並且執行回放的線程會嘗試鎖定互斥鎖。就像這樣:

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(); 
    } 
} 

如果您需要兩個線程之間的溝通,你可以使用標準的IPC機制,例如管道 - 那麼你可以實現暫停和恢復基於這一點。