首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTimer超时和QMutex交互

QTimer超时和QMutex交互
EN

Stack Overflow用户
提问于 2017-07-17 23:04:56
回答 1查看 801关注 0票数 0

假设我们有一些基本的计时器和一个定期调用的槽。

代码语言:javascript
复制
SomeObject::SomeObject()
{
  QTimer *timer = new QTimer;
  connect(timer , SIGNAL(timeout()), this, SLOT(updateState()));
}

void  SomeObject::updateState()
{
   // some operations leading to update of updatedValue
}

我也有来自同一个对象的函数,它强制更新并返回一些值。

代码语言:javascript
复制
bool  SomeObject::getLatestState()
{
  updateState();
  return updatedValue;
}

这个函数可以直接从不同的线程调用。这就引出了线程安全的问题。getLatestState中的简单互斥锁不会有帮助,因为在极少数情况下,getLatestState是从另一个启动updateState的线程调用的。并且同时可能发生定时器的超时。你能帮我妥善处理这种情况吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-17 23:30:45

QMutexLocker can be used in such situations

这是我的示例

代码语言:javascript
复制
static QMutex mainMutex;
.....
MainController* MainController::s_instance = NULL;
.....    
MainController* MainController::getInstance()
{
    if(!s_instance){
        QMutexLocker lock(&mainMutex);
        if(!s_instance){
            s_instance = new MainController;
        }
    }
    return s_instance;
}

从不同的线程直接调用getInstance()函数。

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

https://stackoverflow.com/questions/45147626

复制
相关文章

相似问题

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