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

Muh*_*mar 19 c c++ pthreads

我正在开发一个我做多线程的应用程序.我的一个工作线程在窗口小部件上显示图像.另一个线程播放声音.我想在按钮单击事件上停止/暂停/暂停/休眠线程.和点击视频播放器播放/暂停按钮时相同.我正在使用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)

  • 有关详细信息,请参阅此问题和答案:http://stackoverflow.com/questions/1003190/not-locking-mutex-for-pthread-cond-timedwait-and-pthread-cond-signal-on-linux ... In简而言之,你*有*锁定pthread_cond_wait()周围的互斥锁,建议围绕pthread_cond_signal(). (2认同)