QT知识点总结(三)

1、在编译共享库时,必须将其标记为导出。为了在客户端使用共享库,一些平台可能需要一个特殊的导入声明。

此,Qt 提供了两个特殊的宏:

  • Q_DECL_EXPORT:当编译共享库时,必须将其添加到使用的符号声明。
  • Q_DECL_IMPORT:当编译一个(使用了该共享库)客户端时,必须将其添加到使用的符号声明。

2、QLibrary在运行时加载共享库,需要注意的是对于要解析的函数名,必须将其导出为 C 函数。这意味着如果库是用 C++ 编译器编译的,那么函数必须被包装在一个 extern "C" 块中。此外,还必须使用 Q_DECL_EXPORTQ_DECL_IMPORT 从库中显式导出该函数。如果无法访问动态库的 .h 头文件时,这个方法将很有用。

3、如果使用静态链接库,pro文件中应该始终同时使用 LIBSPRE_TARGETDEPS

4、QMutex:一个线程锁定一个互斥量(mutex),以获得共享资源的访问权限。

5、QReadWriteLock:它区分了“读”和“写”的访问,允许同时读取,从而提高并行性

6、QSemaphore信号量、条件变量QWaitCondition更好一些

7、QMutexLocker、QReadLocker 和 QWriteLocker 是便利类,当他们被构建时,就会锁定资源;当被销毁时,就会自动解锁

8、线程安全:可以同时被多个线程调用

9、可重入性:可以同时被多个线程调用,但是每个调用者只能使用自己的数据。

因此,一个线程安全的函数总是可重入的,但一个可重入的函数并不一定是线程安全的

10、connect的第五个参数:

  • Auto Connection(默认):如果信号在接收者所依附的线程内发射,则等同于Direct Connection。否则,等同于Queued Connection。
  • Direct Connection:当信号发射后,槽函数立即被调用。槽函数在信号发射者所在的线程中执行,而未必需要在接收者的线程中。
  • Queued Connection:当控制权回到接受者所在线程的事件循环时,槽函数被调用。槽函数在接收者的线程中执行。
  • Blocking Queued Connection:槽函数的调用情形和Queued Connection相同,不同的是当前的线程会阻塞住,直到槽函数返回。
  • 注意:在同一个线程中使用这种类型进行连接会导致死锁。
  • Unique Connection:行为与Auto Connection相同,但是连接只会在“不会与已存在的连接相同”时建立,也就是:如果相同的信号已经被连接到相同的槽函数,那么连接就不会被再次建立,并且connect()会返回false。
     

11、永远不要把QThread对象(this)作为该线程中创建的一个对象的父亲

12、虽然QObject是可重入的,但GUI类,尤其是QWidget及其所有子类都不是可重入的,它们只能被用在主线程中

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值