首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux上的c++中睡眠或暂停PThread

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

Stack Overflow用户
提问于 2009-10-22 18:48:40
回答 2查看 36.5K关注 0票数 20

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

谁能告诉我如何实现线程暂停/挂起?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-19 12:08:25

您可以使用互斥、条件变量和共享标志变量来完成此操作。让我们假设这些是全局定义的:

代码语言:javascript
复制
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int play = 0;

你可以这样组织你的回放代码:

代码语言:javascript
复制
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 */
}

然后,要玩,你可以这样做:

代码语言:javascript
复制
pthread_mutex_lock(&lock);
play = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);

然后暂停:

代码语言:javascript
复制
pthread_mutex_lock(&lock);
play = 0;
pthread_mutex_unlock(&lock);
票数 30
EN

Stack Overflow用户

发布于 2009-10-22 18:52:22

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1606400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档