首页| 论坛| 消息
主题:Qt的多线程是不是不能使用QTimer
回帖:这个明显是线程理解不到位导致的
继承QThread,重新实现run的方法其实很不好,初学者会被搞乱的,实际继承类的构造函数和槽函数(被外部对象调用时),都是运行在主线程的,只有run方法和run方法直接调用的函数是运行在子线程中的,这中间如果涉及到不能重入的或者线程不安全的对象,那么就会出现各种奇奇怪怪的错误。而且run中使用类成员,也要注意线程同步(使用Qmutex之类的同步工具),初学者根本掌握不好这些。
反而继承QObject类,然后利用moveToThread()方法创建线程更容易,这种方法不需要线程同步,所有和外部的数据传送全用信号槽就好了,所有的方法都会运行在子线程中(除了构造函数,构造函数为空就好了),更符合初学者的"常识"
下一楼›:反正记住,QThread类的对象本身不在这个对象表示的线程中就完事了
而且至少要看懂最基本的英 ..
‹上一楼:dbzhang800:看Qt手册的话,很少有函数标称是 threadsafe 的,但 postEvent() 是线程安全的:(圣域天子)

查看全部回帖(34)
«返回主帖