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错误 的相关文章

  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 导入错误:无法导入名称线程

    这是我第一次学习Python 我继续尝试线程这篇博文 http www saltycrane com blog 2008 09 simplistic python thread example 问题是它似乎已经过时了 import time
  • Windows Workflow Foundation 4 (WF4) 延迟

    我正在与 Visual Studio 2010 的候选版本一起使用 Wf4 编写一个用于批准资源请求的新工作流程 在我的工作流程中 如果请求未获得批准 我希望请求在几天后过期 我们在 WF 3 5 Visual Studio 2008 中通
  • 以编程方式最小化/恢复窗口,跳过动画效果

    我需要对窗口列表执行多项操作 最小化其中一些 恢复其他 以便立即在两组或多组窗口之间切换 这样做的问题是最小化和恢复窗口时可以看到的动画 整个过程看起来很糟糕 所有这些动画都进进出出 上下移动 但是 我无法禁用这些动画 因为这是针对其他计算
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 更改desktop.ini不会在Windows中自动更新文件夹图标

    我使用此批处理脚本将所有文件夹和子文件夹的图标更改为位于文件夹中的 ico 文件 但是 资源管理器中的文件夹图标不会改变除非我手动重命名desktop ini将资源管理器中的文件更改为其他内容 然后返回desktop ini或者例如将字母更
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • C# - 方法必须有返回类型

    我在调用 C 中的方法时遇到问题 不断收到消息 方法 计算 必须有返回类型 using System Diagnostics namespace WindowsFormsApplication1 public partial class F
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win

随机推荐

  • 用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