如何在Linux上的c中睡眠或暂停PThread

时间:2009-10-22 10:48:40

标签: c++ c pthreads

我正在开发一个我进行多线程处理的应用程序。我的一个工作线程在窗口小部件上显示图像。另一个线程播放声音。我想在按钮单击事件上停止/暂停/暂停/休眠线程。和点击视频播放器播放/暂停按钮时相同。 我正在使用pthread库进行线程化在linux平台上用c ++开发我的应用程序。

有人可以告诉我如何实现线程暂停/挂起吗?

2 个答案:

答案 0 :(得分:29)

您可以使用互斥锁,条件变量和共享标志变量来执行此操作。我们假设它们是全局定义的:

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

答案 1 :(得分:3)

您的线程会定期从UI轮询“消息”。换句话说,一个线程中的UI将动作消息发布到工作者线程,例如音频/视频。