新浪微博
腾讯微博
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理统计
在线会员
会员排行
版块排行
帖子排行
标签排行
帮助
下拉
用户名
电子邮箱
用户名
密 码
记住登录
登录
找回密码
注册
快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
首页
论坛
Qt下载
作品展
群组
个人中心
捐赠、管理与开发
邮件订阅
帖子
文章
日志
用户
版块
群组
帖子
搜索
QTCN开发网
>
Qt基础编程
>
Qt多个线程访问数据库问题
发帖
回复
返回列表
新帖
2718
阅读
5
回复
[讨论]
Qt多个线程访问数据库问题
[复制链接]
上一主题
下一主题
离线
行走的李屁娃
UID:191163
注册时间
2018-08-17
最后登录
2022-08-06
在线时间
5小时
发帖
15
搜Ta的帖子
精华
0
金钱
140
威望
24
贡献值
0
好评度
14
访问TA的空间
加好友
用道具
新手上路
关闭
个人中心可以申请新版勋章哦
立即申请
知道了
加关注
发消息
只看楼主
倒序阅读
楼主
发表于: 2022-08-06
需求描述:在线程A、线程B写入
数据
到
数据库
,窗口C在主
线程
获取数据库数据
目前做法:在线程C维护数据库db对象,线程AB数据通过信号与槽发送给线程C,在线程C执行数据库操作
想知道有什么更好的办法,这样的处理办法维护了太多的信号与槽,很烦
共
条评分
回复
举报
分享到
淘江湖
新浪
QQ微博
QQ空间
开心
人人
豆瓣
网易微博
百度
鲜果
白社会
飞信
离线
feng851
UID:160341
注册时间
2015-03-06
最后登录
2022-08-25
在线时间
18小时
发帖
33
搜Ta的帖子
精华
0
金钱
331
威望
42
贡献值
0
好评度
32
访问TA的空间
加好友
用道具
新手上路
加关注
发消息
只看该作者
1楼
发表于: 2022-08-08
那就要看看你的线程A与线程B的是做什么业务了。感觉上,你是为了业务解耦分了这两个线程,而你通过信号传递给主线程操作数据库,可能是因为数据库是单线程文件型又或是为了保证数据库操作的原子性。没什么大问题啊,个人觉得,你的线程A和线程B也可以通过信号和slot放在主线程内处理
共
条评分
回复
举报
离线
tanyue.esec
UID:203897
注册时间
2020-07-16
最后登录
2024-12-05
在线时间
159小时
发帖
114
搜Ta的帖子
精华
0
金钱
4495
威望
147
贡献值
1
好评度
117
访问TA的空间
加好友
用道具
侠客
加关注
发消息
只看该作者
2楼
发表于: 2022-08-08
感觉AB线程写入数据库,C线程读取数据库,天然就分开了,没必要搞个什么信号了。
主要是不了解ABC都是什么业务
共
条评分
回复
举报
离线
yeguoxiong
UID:41539
注册时间
2008-03-17
最后登录
2024-11-19
在线时间
899小时
发帖
147
搜Ta的帖子
精华
0
金钱
1811
威望
184
贡献值
7
好评度
184
访问TA的空间
加好友
用道具
侠客
加关注
发消息
只看该作者
3楼
发表于: 2022-08-10
可以试一下,用完数据库就关闭。这样可以不用考虑多线程
共
条评分
回复
举报
离线
yeguoxiong
UID:41539
注册时间
2008-03-17
最后登录
2024-11-19
在线时间
899小时
发帖
147
搜Ta的帖子
精华
0
金钱
1811
威望
184
贡献值
7
好评度
184
访问TA的空间
加好友
用道具
侠客
加关注
发消息
只看该作者
4楼
发表于: 2022-08-10
const QString &connectionName = QString("%1%2").arg(metaObject()->className()).arg(QRandomGenerator::global()->generate());
if(true)
{
const DatabaseStruct &m_dbStruct = DataServices::instance()->dbStruct();
QSqlDatabase db = QSqlDatabase::addDatabase(m_dbStruct.type, connectionName);
db.setHostName(m_dbStruct.hostName);
db.setDatabaseName(m_dbStruct.dbName);
db.setUserName(m_dbStruct.userName);
db.setPassword(m_dbStruct.password);
db.setPort(m_dbStruct.port);
if(db.open())
{
QSqlQuery query(db);
query.prepare("SELECT COUNT(1) FROM g_t_devices WHERE LOCATE(?,IFNULL(areaToken,''))>0 LIMIT 1");
query.addBindValue(projectId);
query.exec();
while(query.next())
{
qDebug()<<query.value(0).toInt();
}
}else
{
Utils::instance()->log4c()->addErrorLog(QStringLiteral("[数据管理]%1数据库打开出错,Error:%2。").arg(metaObject()->className()).arg(db.lastError().text()));
}
db.close();
}
QSqlDatabase::removeDatabase(connectionName);
共
条评分
回复
举报
离线
angelus
UID:116426
注册时间
2011-05-07
最后登录
2024-10-09
在线时间
200小时
发帖
283
搜Ta的帖子
精华
1
金钱
3034
威望
306
贡献值
10
好评度
297
访问TA的空间
加好友
用道具
侠客
加关注
发消息
只看该作者
5楼
发表于: 2022-08-11
线程A独立写入数据A; 发送信号 告诉C ,写完了
线程B独立写入数据B; 发送信号 告诉C,写完了
线程C,接到信号,就去数据库读,更新界面
写数据的类需要你自己处理下,加入一下写同步锁就行了.
线程里边的逻辑尽量封装独立,只抽象几个简单信号通知外界.这样你维护起来也简单
共
条评分
回复
举报
发帖
回复
返回列表
http://www.qtcn.org/bbs
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
快速回复
限100 字节
您目前还是游客,请
登录
或
注册
进入高级模式
文字颜色
发 布
回复后跳转到最后一页
上一个
下一个
关闭
补充发布信息
验证码:
发 布
隐藏
快速跳转
站务及资讯
网站公告
新闻资讯
Qt官方发布
网站管理
Qt应用及资源
Qt 作品展
Qt代码秀
Qt应用版
Qt技术讨论区
Qt安装与发布
Qt中文处理
Qt基础编程
Qt QML开发
Qt嵌入式开发
Qt移动平台开发
其它技术开发讨论区
Qt图书专区
《C++ GUI Qt 4编程》(第2版)专栏
《Qt高级编程》专栏
《零基础学Qt4编程》专栏
《Qt设计模式》(第2版) 图书专栏
Python Qt GUI快速编程
Qt项目开发区
天池项目
Qt开放平台开发库
Qt版百度云笔记
机械CAD
Qt文档计划
QTCN网站系统开发
扇贝词典
非活跃项目区
社区中心
帖子回收站(Trash)
招聘、求职、供求、广告等
休闲娱乐
关闭
关闭
选中
1
篇
全选