Qt 之 Threads 和 QObjects

本文详细介绍了Qt中的线程和QObjects的使用,包括QObject的可重入性、每个线程的事件循环、从其他线程访问QObject子类以及跨线程的信号和槽。强调了QThread的事件循环、线程安全问题以及信号槽的四种连接类型,特别指出Direct Connection在不同线程间的不安全性,并提供了Mandelbrot和Blocking Fortune Client两个示例来说明实践中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者: 一去、二三里
个人微信号: iwaleon
微信公众号: 高效程序员

QThread继承自QObject,它发射信号(signals)以表明线程执行开始或结束,并提供了一些槽函数(slots)。

更有趣的是,QObjects可以在多线程中使用,发射信号以在其它线程中调用槽函数,并且向“存活”于其它线程中的对象发送事件(post events)。这是可能的,因为每一个线程都拥有它自身的事件循环(event loop)。

QObject可重入性

QObject是可重入的。它的大多数非GUI子类,例如:QTimer、QTcpSocket、QUdpSocket和QProcess,也都是可重入的,这使得在多线程中同时使用这些类成为可能。**注意:**这些类被设计成在单一线程中创建和使用的,在一个线程中创建一个对象而在另一个线程中调用该对象的函数,不保证能行得通。需要注意有三个约束:

  • 一个QObject类型的孩子必须总是被创建在它的父亲所被创建的线程中。这意味着,除了别的以外,

### Qt 编译器差异分析 #### MSVC MinGW 编译器概述 MSVC(Microsoft Visual C++)编译器由微软提供,专为 Windows 平台设计。此编译器支持最新的 Windows API 功能以及特定于 Windows 的优化技术[^1]。 MinGW(Minimalist GNU for Windows)是一个用于创建本地 Windows 应用程序的轻量级开发环境。它基于 GCC(GNU Compiler Collection),能够生成不依赖外部运行库的标准 Windows 可执行文件[^2]。 #### 运行时库的区别 MSVC 使用自己的运行时库 `msvcrt` 或更新版本如 `ucrt` `vcruntime`,这些库提供了标准 C/C++ 函数实现并紧密集成到操作系统中。相比之下,MinGW 主要依靠 Glibc 或其变体来提供类似的接口服务[^3]。 #### 异常处理机制的不同 MSVC 支持结构化异常处理(SEH),这是 Windows 特有的错误恢复方法;而 MinGW 则采用更通用的语言级别异常捕获方式,即通过 try-catch 块来进行异常管理[^4]。 #### 多线程模型的选择 对于多线程应用程序,在选择 MinGW 构建工具链时可以选择 POSIX 风格或多线程 Win32 API 实现作为底层支撑。POSIX 线程通常被认为更加灵活且跨平台友好,但可能不如原生 Win32 方案高效[^5]。 ```cpp // 示例:使用不同的线程库编写简单的多线程应用 #ifdef _WIN32 #include <windows.h> void CreateThreadExample() { HANDLE hThread; DWORD threadID; hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &threadID); } #else // Unix-like systems including those using MinGW with POSIX threads #include <pthread.h> void PthreadCreateExample() { pthread_t tid; pthread_create(&tid, NULL, ThreadFunc, NULL); } #endif ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一去丶二三里

有收获,再打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值