首页| 论坛| 消息

回复: Qt的多线程是不是不能使用QTimer
#31 回 dbzhang800 的帖子 [圣域天子 11-18 12:11]
dbzhang800:看Qt手册的话,很少有函数标称是 threadsafe 的,但 postEvent() 是线程安全的:
void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
....
Note: This function is thread-safe
....... (2019-11-16 22:08) 
它有些处理,还是排队进行的,内部并不是业务层面的多线程。
可能是因为Qt主要是界面库,而界面处理一般都是只在主线程中,所以引起了很多线程之间不能乱跨的限制。
所以多线程还是自己控制会比较好。
#32 [rpdhunter 11-20 12:10]
这个明显是线程理解不到位导致的
继承QThread,重新实现run的方法其实很不好,初学者会被搞乱的,实际继承类的构造函数和槽函数(被外部对象调用时),都是运行在主线程的,只有run方法和run方法直接调用的函数是运行在子线程中的,这中间如果涉及到不能重入的或者线程不安全的对象,那么就会出现各种奇奇怪怪的错误。而且run中使用类成员,也要注意线程同步(使用Qmutex之类的同步工具),初学者根本掌握不好这些。
反而继承QObject类,然后利用moveToThread()方法创建线程更容易,这种方法不需要线程同步,所有和外部的数据传送全用信号槽就好了,所有的方法都会运行在子线程中(除了构造函数,构造函数为空就好了),更符合初学者的"常识"
#33 [fsu0413 12-04 07:50]
反正记住,QThread类的对象本身不在这个对象表示的线程中就完事了
而且至少要看懂最基本的英文错误描述吧。。。。。
#34 [ragtime 12-27 16:01]
不要用timer。用timerevent,用信号槽 这么绑定
connect(this,&MYCLASS::signalStarttimer,this,&MYCLASS::slotStartTimer);
俗称的我绑我自己。稳稳的。

<< 5 6 7 >> (7/7)

回复 发表
主题 版块