用户界面UI -- 客户端 -- 数据库 交互时时间保护

         界面UI和客户端交互用的是windows消息机制,PostMessage();是异步的,操作之后就会返回结果,客户端与数据库链接是长连接,异步的,根据报文多少设置心跳包时间长短。为了让一个操作能连贯,在中间加一个时间保护机制。当UI传消息给客户端时,交互结束,增加一个时间保护,等到数据库传输结束。

        注意要针对异常操作加时间保护释放。


代码片段

void CDB::StartProtect(bool bEnableMsgPump, unsigned int nTimeLimit)
{
	if (s_bEnableMsgPump || s_nTimeLimit)
		throw soci::soci_error("server is busy", soci::soci_error::DBE_CMD_BUSY);

	ResetProtect(bEnableMsgPump, nTimeLimit);
}

void CDB::ResetProtect(bool bEnableMsgPump, unsigned int nTimeLimit)
{
	s_bEnableMsgPump = bEnableMsgPump;
	s_nTimeLimit = nTimeLimit;

	if (s_nTimeLimit)
		m_Session.timelimit(s_nTimeLimit);

	if (s_bEnableMsgPump)
		m_Session.msg_pump(true);
}

//
void CDB::EndProtect()
{
	if (s_nTimeLimit)
		m_Session.timelimit(0);

	if (s_bEnableMsgPump)
		m_Session.msg_pump(false);

	s_bEnableMsgPump = false;
	s_nTimeLimit = 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void Widget::Select() //查询 { QString name = ui->lineEdit->text(); model->setFilter(QObject::tr("id = '%1'").arg(name)); //根据姓名进行筛选 model->select(); //显示结果 } void Widget::Delect() //删除当前行 { int curRow = ui->tableView->currentIndex().row(); //获取选中的行 model->removeRow(curRow); //删除该行 int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定" "删除当前行吗?"), QMessageBox::Yes,QMessageBox::No); if(ok == QMessageBox::No) { model->revertAll(); //如果不删除,则撤销 } else model->submitAll(); //否则提交,在数据库中删除该行 } void Widget::Add() //插入记录 { int rowNum = model->rowCount(); //获得表的行数 int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),id); //model->submitAll(); //可以直接提交 } void Widget::Back() //返回全表 { model->setTable("student"); //重新关联表 model->setHeaderData(0, Qt::Horizontal, "Time"); model->setHeaderData(1, Qt::Horizontal, "Temperature"); model->select(); //这样才能再次显示整个表的内容 } void Widget::Amend() //提交修改 { model->database().transaction(); //开始事务操作 if (model->submitAll()) { model->database().commit(); //提交 } else { model->database().rollback(); //回滚 QMessageBox::warning(this, tr("tableModel"), tr("数据库错误: %1").arg(model->lastError().text())); } } void Widget::Get_time() { QString string; QTime current_time = QTime::currentTime(); int hour = current_time.hour(); int minute = current_time.minute(); int second = current_time.second(); // int msec = current_time.msec(); string=QString("%1").arg(hour)+":"+QString("%1").arg(minute) +":"+QString("%1").arg(second); ui->Receive->append(string); //qDebug() <rowCount(); //获得表的行数 // int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),string); model->submitAll(); } void Widget::readMyCom() { QByteArray temp = myCom->readAll(); if(temp.size()!=0) { QString string; QTime current_time = QTime::currentTime(); int hour = current_time.hour(); int minute = current_time.minute(); int second = current_time.second(); // int msec = current_time.msec(); string=QString("%1").arg(hour)+":"+QString("%1").arg(minute) +":"+QString("%1").arg(second); ui->Receive->append(string); //qDebug() <rowCount(); //获得表的行数 // int id = 10; model->insertRow(rowNum); //添加一行 model->setData(model->index(rowNum,0),string); model->setData(model->index(rowNum,1),temp); model->submitAll(); data_light=temp.toInt(); } ui->Receive->append(temp); } void Widget::openCom() { QString portName = ui->portNameComboBox->currentText(); myCom = new Win_QextSerialPort(portName,QextSerialBase::EventDriven); myCom ->open(QIODevice::ReadWrite); if(ui->baudRateComboBox->currentText()==tr("9600")) myCom->setBaudRate(BAUD9600); else if(ui->baudRateComboBox->currentText()==tr("115200")) myCom->setBaudRate(BAUD115200); myCom->setFlowControl(FLOW_OFF); myCom->setTimeout(500); connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom())); ui->openMyComBtn->setEnabled(false); ui->closeMyComBtn->setEnabled(true); ui->baudRateComboBox->setEnabled(false); ui->portNameComboBox->setEnabled(false); }
要使用 Flask 和 SQLite 做一个笔记程序并具有集成UI界面,需要涉及以下内容: 1. Flask 框架:Flask 是一款 Python 的 Web 开发框架,可以用来快速构建 Web 应用程序。需要了解 Flask 的基本使用方法,包括路由、视图函数、模板引擎、表单处理、Session 等功能。 2. SQLite 数据库:SQLite 是一款轻量级的嵌入式数据库,使用简单,适合小型项目。需要了解 SQLite 数据库的基本操作方法,包括创建表、插入数据、查询数据、更新数据和删除数据等。 3. HTML 和 CSS:HTML 是用于创建 Web 页面的标记语言,CSS 用于样式设计,需要了解 HTML 和 CSS 的基本语法和使用方法,包括标签、样式、布局等。 4. JavaScript:JavaScript 是一种客户端脚本语言,用于实现动态效果和与服务器交互。需要了解 JavaScript 的基本语法和使用方法,包括事件处理、DOM 操作、Ajax 请求等。 5. UI 设计:需要设计一个美观且易于使用的用户界面,包括主页面、笔记列表、笔记编辑、笔记删除等功能。 6. 数据库连接和操作:需要编写 Python 代码,将 Flask 和 SQLite 进行连接,实现数据的增删改查等操作。 7. 集成UI界面:需要将 HTML、CSS 和 JavaScript 集成到 Flask 应用程序中,实现与用户的交互。 总之,要使用 Flask 和 SQLite 做一个笔记程序并具有集成UI界面,需要了解 Flask 框架、SQLite 数据库、HTML、CSS、JavaScript、UI 设计和数据库连接和操作等内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值