当上一个槽已经写入并且还没有完成时,阻止一个槽执行一个方法
Qt-C++ Preventing a slot to execute a method, when a previous slot already dit and has not finished
在我的项目中,我有几个对象收集一些数据并将它们放入数据库,现在由于某些原因数据库链接可能会失败,所以我为它发出信号并将其绑定到一个插槽,该插槽将在日志文件中写入发生的事情并尝试重新连接到数据库。
现在的问题是,有时会发生一个信号触发槽,然后尝试重新连接到数据库,而之前的连接正在进行中。当对象在一个非常小的间隔内发送几个请求时,这个问题总是会发生,因为一旦请求失败,就会发出信号来重新建立连接。
所以我想要的是一个适当的方法来防止任何插槽调用"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()是我写日志的函数
您可以通过布尔检查来完成此操作,指示连接数据库的尝试已经在进行中。
void MyClass::slotConnectToDatabase()
{
if (m_connectingToDatabase)
return;
m_connectingToDatabase = true;
// connect to database
m_connectingToDatabase = false;
}
第一次调用connectToDatabase
时,可以设置一个布尔变量为true,表示调用了connectToDatabase
。在connectToDatabase
方法中,您可以检查此变量并返回,如果它为真:
void connectToDatabase()
{
if(!connected)
connected = true;
else
return;
//...
}
相关文章:
- 不能将方法返回的值用于另一个方法
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- 重写另一个方法 [C++] 使用的超类回调函数
- C++:如何使用传递引用在一个方法中返回多个值
- 为什么一个方法对同一个变量有常量和非常量参数?
- 从同一类中的另一个方法调用方法时出错
- 向现有类添加一个方法以逐行读取文件的内容
- 无法从派生的一个方法调用基类方法
- 如何将一个方法中的值返回到同一类的另一个方法
- 方法重载 C++ -> 只有一个方法调用
- 在另一个线程中执行一个方法
- 是否可以在另一个方法中使用模板类中定义的虚拟方法
- 调用方法,该方法修改字段,而使用该字段的另一个方法正在执行
- 将一个方法作为参数传递给另一个方法,该方法本身将传递的方法传递给 std 线程
- 仅专用于模板类的一个方法(部分)
- 确定一个方法是否是纯虚拟的(c++)
- 是否可以判断一个方法在编译时是否可以公开访问
- 我正在尝试创建一个方法,该方法使用指针算术返回一对,它是否会出错
- 从 ndk 中的 jni 方法调用另一个C++方法