目录
- 反射的需求
- qt中的反射
- QMetaObject::invokeMethod
- 线程与事件循环
- 小总结
反射的需求
反射的设计模式需求
qt中的反射
java、c#这种有统一管理的语言对反射支持的比较好,c++中不支持反射。但是qt的元对象系统对反射提供了可能。
学习博文:
Q_INVOKABLE与invokeMethod用法全解
QMetaObject::invokeMethod
Q_INVOKABLE的理解与使用变得越来越重要。
使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。
bool QMetaObject::invokeMethod ( QObject * obj, const char * member,Qt::ConnectionType type,
QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ), …)
线程与事件循环
事件循环与线程 一
难读:事件循环与线程 二
小总结
多线程的使用是需要小心的,qt提供了方便的方式创建多线程,但是在处理多线程的操作时会引起很多问题很难处理。
只有在没有提供非阻塞API的情况下才使用多线程。
用其他设计模式解决异步编程的问题:
1、状态机解决 网络编程的异步问题
2、拆分任务块用QMetaObject::invokeMethod解决异步的问题
3、QTimer固定时间出发不用在run()里面sleep(1000)来固定触发。
4、自己写消息队列来判断事件后触发。(hncc的旷世人脸对比)
QT程序只有一个gui线程负责交互。
