如何在Linux上的c中睡眠或暂停PThread
我正在开发一个我做multithreading的应用程序。 我的一个工作线程在窗口小部件上显示图像。 另一个线程播放声音。 我想在按钮单击事件上停止/暂停/暂停/hibernate线程。 和点击video播放器播放/暂停按钮时相同。 我正在使用pthread库进行线程化在linux平台上用c ++开发我的应用程序。
有人能告诉我如何实现线程暂停/挂起吗?
您可以使用互斥锁,条件变量和共享标志变量来执行此操作。 我们假设它们是全局定义的:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int play = 0;
您可以像这样构建播放代码:
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 */ }
然后,玩你可以这样做:
pthread_mutex_lock(&lock); play = 1; pthread_cond_signal(&cond); pthread_mutex_unlock(&lock);
暂停:
pthread_mutex_lock(&lock); play = 0; pthread_mutex_unlock(&lock);
您的线程会定期从UI轮询“消息”。 换句话说,一个线程中的UI将动作消息发布到工作者线程,例如音频/video。