3
我知道互斥鎖可以是一個實現,但我想知道會有一種方法來暫停/恢復視頻播放中的另一個線程。當其他運行線程複雜時,這種方法更容易編程。暫停/恢復另一個線程
我知道互斥鎖可以是一個實現,但我想知道會有一種方法來暫停/恢復視頻播放中的另一個線程。當其他運行線程複雜時,這種方法更容易編程。暫停/恢復另一個線程
有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機制,例如管道 - 那麼你可以實現暫停和恢復基於這一點。
http://stackoverflow.com/questions/1606400/how-to-sleep-or-pause-a-pthread-in-c-on-linux可能會幫助你 –
它可能更容易編程,但它是很難得到正確的。更難了。幾乎不可能,事實上...... – Nemo