gpt4 book ai didi

c++ - 在Qt中,如何使用定时器来启用/禁用一个功能?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:45 26 4
gpt4 key购买 nike

假设我有一个函数 work(),一旦它被调用,我不希望它在接下来的 5 秒内被调用。目前,我设计了一些简单的代码:

connect(timer,SIGNAL(timeout()),this,SLOT(resetflag()));
...
if(!flag)
{
flag = true;
work();
timer.start();
}
...
void resetflag(){
flag = flase;
}

我的问题是:1.) 如何使这个线程安全? 2.) 有没有更简单优雅的方法来做到这一点?

最佳答案

保留上次调用函数的时间戳并在工作完成时更新它可能更简单:

//field
QElapsedTimer timeSinceLastCall;


//function
if(!timeSinceLastCall.isValid()||timeSinceLastCall.hasExpired(5*1000))
{
timeSinceLastCall.restart();
work();
}

但是该函数不是线程安全的(多个线程可以进入 work()),您需要一些其他方法来排除它们,例如:

//field
QElapsedTimer timeSinceLastCall;
QMutex mutex;


//function
{
QMutexLocker locker(&mutex);
if(timeSinceLastCall.isValid() && !timeSinceLastCall.hasExpired(5*1000))
return;
timeSinceLastCall.restart();
}
work();

关于c++ - 在Qt中,如何使用定时器来启用/禁用一个功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26716154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com