1.事件循环
Qt的主事件循环能够从事件队列中获取本地窗口系统事件,然后判断事件类型,并将事件分发给特定的接收对象。
主事件循环通过调用QCoreApplication::exec()启动,随着QCoreApplication::exit()结束,本地的事件循环可用利用QEventLoop构建。
2.多线程
第一种方法:
- 创建一个类从QThread类派生
- 在子线程类中重写 run 函数, 将处理操作写入该函数中
- 在主线程中创建子线程对象, 启动子线程, 调用start()函数
第二种方法: - 将业务处理抽象成一个业务类, 在该类中创建一个业务处理函数
- 在主线程中创建一QThread类对象
- 在主线程中创建一个业务类对象
- 将业务类对象移动到子线程中
- 在主线程中启动子线程
- 通过信号槽的方式, 执行业务类中的业务处理函数
多线程使用注意事项:
-
- 业务对象, 构造的时候不能指定父对象
-
- 子线程中不能处理ui窗口(ui相关的类)
-
- 子线程中只能处理一些数据相关的操作, 不能涉及窗口
3.多线程同步
1.临界区被初始化后,当程序进入临界区后便拥有临界区的所有权,其余线程无权进入只能等对方释放临界区之后,方可进入临界区拥有其所有权再对临界区进行操作临界区为依次访问,不能实现其中一个线程一释放临界区就会被另一个线程访问临界区!不能实现实时监听;
2.事件对象是指用户在程序中使用内核对象的有无信号状态实现线程的同步临界区被初始化后一旦事件对象被设置为有信号 立刻会被其余线程访问!能实现实时监听
3.互斥对象还可以在进程间使用,在实现线程同步时包含
- 子线程中只能处理一些数据相关的操作, 不能涉及窗口