gpt4 book ai didi

c++ - Qt-C++ 防止插槽执行方法,当前一个插槽已经 dit 并且尚未完成时

转载 作者:行者123 更新时间:2023-11-28 00:29:22 25 4
gpt4 key购买 nike

在我的项目中,我有几个收集一些数据并将它们放入数据库的对象,现在由于某些原因数据库链接可能会失败,所以我为它发出信号并将其绑定(bind)到一个插槽,该插槽将写入发生的事情日志文件并尝试重新连接到数据库。

现在的问题是,有时会发生信号触发插槽,然后在先前的连接正在进行时尝试重新连接到数据库。由于对象在非常小的间隔内发送多个请求,所以这个问题总是会发生,因为一旦请求失败,就会发出信号以重新建立连接。

所以我想要的是一种正确的方法来防止任何插槽在另一个插槽已经调用“connectToDatabase()”方法时调用它,以便该方法正确结束。

这是插槽。

void mainFrame::reconnectDatabase(QSqlQuery *failedQuery)
{
log_it("QUERY:\""+failedQuery->lastQuery()+"\" ERROR:\""+failedQuery->lastError().text()+"\"");
log_it("Re-connecting to Database...");
QSqlDatabase db = QSqlDatabase::database();
if(!db.open())
log_it("Reconnecting database operation failed! REASON: \""+db.lastError().text()+"\"");
}

log_it() 是我写日志的函数。

最佳答案

您可以通过 bool 检查来完成此操作,该检查指示连接到数据库的尝试已经在进行中。

void MyClass::slotConnectToDatabase()
{
if (m_connectingToDatabase)
return;

m_connectingToDatabase = true;
// connect to database
m_connectingToDatabase = false;
}

关于c++ - Qt-C++ 防止插槽执行方法,当前一个插槽已经 dit 并且尚未完成时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500898/

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