Windows、Linux中std::this_thread::get_id()导致的Qt中sql执行报Driver not loaded错误

2023-11-14

Windows、Linux中std::this_thread::get_id()导致的Qt中sql执行报Driver not loaded错误

抽象代码:

void dosomework()
{
    std::ostringstream oss;
    oss << std::this_thread::get_id();
    std::string stid = oss.str();
    std::string dbname = "m_"+stid;
    QSqlDatabase db;
    {
        //mutex locked
        if(QSqlDatabase::connectionNames().contains(dbName.c_str())){
            db = QSqlDatabase::database(dbName.c_str());
        }else{
            db = QSqlDatabase::addDatabase("QSQLITE",dbName.c_str());
            db.setDatabaseName(dbpath);// 创建数据库
            db.open();
        }
    }
    /*
    这之间最好有一个db的判断
    if(db.isOpen())
    {
        // continue run;
    
    }else{
        // error
    }
    */
    QSqlQuery query(db);
    //下面是query执行语句
}

void handleLoop(Msg &msg)
{
    std::thread demothread([](){
        dosomework();
    });
    demothread.join();
    #linux
    sleep(1);
    #windows
    Sleep(1000);
}

上面示例代码中使用std::this_thread::get_id()作为db连接的名字,主要目的是可以同一个线程保证只有一个db连接。

但是。。。。。

Windows环境下std::this_thread::get_id()返回的都是不同的值,每次线程结束db的连接也会随之关闭。但是,但是,但是,linux上返回的尽然是一样的值,导致第二个线程再次连接db的时候,由于连接已经被第一个线程关闭了,执行query时直接报driver not loaded错误。

下面是测试代码

/// Linux
#include <unistd.h>
#include <iostream>
#include <thread>

void dosomework()
{
	std::cout << std::this_thread::get_id() << std::endl;
}

int main()
{
	for (int i = 0; i < 10; ++i){
		std::thread connectthread([](){
			dosomework();
		});
		std::cout << "connectthread:" << connectthread.get_id() << std::endl;
		connectthread.join(); 
		sleep(1000);
	}
	return 0;
}

结果:

120364298702360
connectthread:120364298702360
120364298702360
connectthread:120364298702360
120364298702360
connectthread:120364298702360
。。。
/// windows
#include <Windows.h>
#include <iostream>
#include <thread>

void dosomework()
{
	std::cout << std::this_thread::get_id() << std::endl;
}

int main()
{
	for (int i = 0; i < 10; ++i){
		std::thread connectthread([](){
			dosomework();
		});
		std::cout << "connectthread:" << connectthread.get_id() << std::endl;
		connectthread.join(); 
		Sleep(1000);
	}
	return 0;
}

结果

22360
connectthread:22360
4400
connectthread:4400
20852
connectthread:20852
23104
connectthread:23104
20152
connectthread:20152
4760
connectthread:4760
19496
connectthread:19496
400
connectthread:400
21152
connectthread:21152
23276
connectthread:23276
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows、Linux中std::this_thread::get_id()导致的Qt中sql执行报Driver not loaded错误 的相关文章

  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 如何使用 python 在 Windows 中禁用/启用特定 USB 端口? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在图形窗口中创建一个切换开关 可以使用 python 禁用 启用 Windows 中的特定 USB 端口 我可以使用哪个外部命令或
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 开发者可以在 Windows 应用程序中使用 iCloud 吗?

    开发人员可以使用 Apple 的 iCloud API 在 Mac OS X 和 iOS 上的不同版本的应用程序之间同步应用程序数据 如果开发人员拥有 Windows 版本的应用程序 该版本是否也可以使用 iCloud 将应用程序数据与 M
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 如何使用 PowerShell 扩展 ZIP 存档(UTF-8 文件名)

    我的 zip 存档有一个文件 P re No l txt 该 zip 可以通过 Windows 文件资源管理器 7 Zip 或我尝试过的任何其他工具很好地扩展 但我不知道如何从 PowerShell 中做到这一点 显然我已经尝试过展开 存档
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • Qt 5.6 测试版 Visual Studio 2015

    我已经安装了这个 http download qt io development releases qt 5 6 5 6 0 beta qt opensource windows x86 msvc2015 5 6 0 beta exe mi
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 在Windows 7上安装curl后缺少libcurl-4.dll

    按照这个人的安装curl后指示 https stackoverflow com a 28757477 1186038 除了第 2 步 已安装Win64 OpenSSL v1 0 1u 轻型相反 因为下载页面中缺少版本 k http slpr
  • Qt - 设置不可编辑的QComboBox的显示文本

    我想将 QComboBox 的文本设置为某些自定义文本 不在 QComboBox 的列表中 而不将此文本添加为 QComboBox 的项目 此行为可以在可编辑的 QComboBox 上实现QComboBox setEditText cons

随机推荐

  • 用nodejs到底做什么?

    如何解决学了之后无法解决问题的状态 前端的内容很多 有html css javascript三个大模块 但是如何能去解决问题 核心还是根据你的兴趣 或者你根据一个你能看到的实际项目好好研究一下代码 了解其中运作的机制 然后尝试着修改一下代码
  • EduCoder_web实训作业--CSS样式规则

    由于时间关系 我只写第四题啦 2020 12 31 已将缺失关卡补全 第一关 B D C A B 第二关 h1 style font family 楷体 text align center line height 2 静夜思 h1 h2 s
  • Pandas数据处理与分析

    文章目录 前言 1 导入数据 2 审阅数据 3 数据预处理 4 数据分析 5 pandas数据可视化 这里不再过多的讲解pandas可视化 因为pandas中的数据可视化已经可以满足我们大部分的要求了 也就省下了我们很多自己使用 如 mat
  • flume实验

    1 上传flume ng 1 5 0 cdh5 3 6 tar gz 至 opt modules cdh 并解压 2 编辑 conf flume env sh export JAVA HOME usr java jdk1 7 0 79 3
  • 串口通信与编程01:串口基础知识

    串口通信与编程01 串口基础知识 串口是串行接口 serial port 的简称 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 serial communication 在一条信号线上将数据一个比特一个比特地逐位进行传输的通
  • Nginx学习笔记3【老男孩教育】

    Nginx模块使用 autoindex网站列表功能 下载功能子配置文件 修改nginx子配置文件 限制模块 认证模块 创建用户名和密码 状态模块 location功能 Goaccess日志分析 模块总结
  • 华为OD机试真题 Java 实现【最小的调整次数】【2023Q1 100分】

    一 题目描述 有一个特异性的双端队列 该队列可以从头部或尾部添加数据 但是只能从头部移出数据 小A依次执行2n个指令往队列中添加数据和移出数据 其中n个指令是添加数据 可能从头部添加 也可能从尾部添加 依次添加1到n n个指令是移出数据 现
  • 小学期-中期总结报告

    实训中期总结报告 一 人文 本次实训采取讲练结合的方式 四次讲座分别介绍了实训整体要求安排 开发环境与流程 实验板的硬件电路 单片机原理 随着进度循序渐进 在实践方面 参观贴片整体流程 自己动手焊接电路板 下载实例进行学习 各个案例按照I
  • 使用 npm link 测试本地编写的 node 模块 / 引入全局安装的 node 模块

    目录 1 npm install VS npm install g 2 npm install g 的本质 映射脚本的作用 3 如何测试使用未发布的 npm 包 npm link 原理 4 link 到项目 4 1 全局 link 4 2
  • 2023最新51单片机毕设选题推荐

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 4 最后 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下
  • 常见排序算法的时间复杂度、空间复杂度、稳定性比较

    常见排序算法的时间空间复杂度 稳定性比较 一 排序算法比较 注 1 归并排序可以通过手摇算法将空间复杂度降到O 1 但是时间复杂度会提高 2 基数排序时间复杂度为O N M 其中N为数据个数 M为数据位数 二 辅助记忆 1 时间复杂度记忆
  • vue中页面自动刷新

    当我们在做项目时 我们需要做当前页面的刷新来达到数据更新的目的 在此大概总结了几种常用的页面刷新的方法 1 window location reload 是原生JS提供的方法 this router go 0 是vue路由里面的一种方法 这
  • 在Ubuntu上搭建samba服务器实现文件共享

    通常情况下Ubuntu通过开启共享文件夹只能实现Windows和Ubuntu的文件共享 而在Ubuntu上搭建samba服务器则可以实现同一局域网下不同操作系统文件共享 实现更多便捷操作 以下总结了在Ubuntu上搭建samba服务器的具体
  • Android7.1 使用ToolBar, XML文件报错 androidx.appcompat.widget.Toolbar, was not found in the project解决方案

    完整报错信息 Class referenced in the layout file androidx appcompat widget Toolbar was not found in the project or the librari
  • 爬虫实战—轻松爬取全国40城5000+地铁站点数据!附源码和数据集

    原文链接 小一教你轻松爬取全国40城5000 地铁站点数据 附源码和数据集 大家好 我是小一 上一篇文章讲了一个失败的数据分析案例 导致失败最最主要的原因就两个字 数据 有时候 爬虫爬到的数据是很珍贵 很稀缺 但是在实际项目最好还是多点谨慎
  • Netty网络编程(二):架构概述

    文章目录 简介 netty架构图 丰富的Buffer数据机构 统一的API 事件驱动 其他优秀的特性 总结 简介 Netty为什么这么优秀 它在JDK本身的NIO基础上又做了什么改进呢 它的架构和工作流程如何呢 请走进今天的netty系列文
  • python中三大数据提取方法(3)----正则表达式re库

    1 什么是正则表达式 正则就是特定的规则对数据进行过滤 拿到我们想要的数据 在python中爬虫提取数据时re是万能的 所有的数据都可以使用re进行提取 python正则表达式的使用要借助re模块 安装方法 pip install re 2
  • CVE-2022-26134 Confluence远程命令执行漏洞复现

    Confluence介绍 Confluence是一个专业的企业知识管理与协同软件 也可以用于构建企业wiki 使用简单 但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息 文档协作 集体讨论 信息推送 Confluence Serve
  • 【计算机毕业设计】232流浪动物领养信息系统

    一 系统截图 需要演示视频可以私聊 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本流浪动物领养信息系统就是在这样的大环境下诞生 其可以帮助管理者在短时间内处理
  • Windows、Linux中std::this_thread::get_id()导致的Qt中sql执行报Driver not loaded错误

    Windows Linux中std this thread get id 导致的Qt中sql执行报Driver not loaded错误 抽象代码 void dosomework std ostringstream oss oss lt l