我正在开发一个我做多线程的应用程序.我的一个工作线程在窗口小部件上显示图像.另一个线程播放声音.我想在按钮单击事件上停止/暂停/暂停/休眠线程.和点击视频播放器播放/暂停按钮时相同.我正在使用pthread库进行线程化在linux平台上用c ++开发我的应用程序.
有人能告诉我如何实现线程暂停/挂起吗?
Lnx*_*gr3 29
您可以使用互斥锁,条件变量和共享标志变量来执行此操作.我们假设它们是全局定义的:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int play = 0;
Run Code Online (Sandbox Code Playgroud)
您可以像这样构建播放代码:
for(;;) { /* Playback loop */
pthread_mutex_lock(&lock);
while(!play) { /* We're paused */
pthread_cond_wait(&cond, &lock); /* Wait for play signal */
}
pthread_mutex_unlock(&lock);
/* Continue playback */
}
Run Code Online (Sandbox Code Playgroud)
然后,玩你可以这样做:
pthread_mutex_lock(&lock);
play = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)
暂停:
pthread_mutex_lock(&lock);
play = 0;
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)