场景:
1、在线程A创建一个对象列表C,每个对象中包含一个QTimer类,QTimer定时触发用于监测状态。连续触发三次后该对象B需从列表C中移除,并delete。
2、QTimer创建(new)在对象B的构造函数中,释放的信号与槽也在构造函数中,释放QTimer的信号在对象B的析构函数中emit。
3、每次delete对象B时提示--跨线程释放QTimer;
解决办法:
释放QTimer的信号不在对象B的析构函数中触发,而是在线程A中delete对象B的语句前面触发。(delete对象B前建立释放QTimer的信号与槽,再emit。若创建对象B时就建立该信号与槽,可能会误释放掉列表C中的其他对象的QTimer);
以下是查到的相关资料,同时也可查看线程亲和性相关资料;
让QTimer 跑在其他线程
https://blog.csdn.net/weixin_42248496/article/details/80384648
跨线程间的定时器机制----QTimer和QThread
https://blog.csdn.net/beibeix2015/article/details/78738694
查看完整版本: [-- Qt的多线程是不是不能使用QTimer --]
http://www.qtcn.org/bbs/read-htm-tid-86349.html
Qt中QTimer和timerevent的区别与用法
https://blog.csdn.net/beibeix2015/article/details/78738694
Qt多线程中使用QTimer(常见问题汇总)
https://blog.csdn.net/zjgo007/article/details/105403341/
Qt使用多线程的一些心得——2.继承QObject的多线程使用方法
https://blog.csdn.net/czyt1988/article/details/71194457
Qt5.9一个简单的多线程实例(类QThread)(第一种方法)
https://blog.csdn.net/naibozhuan3744/article/details/81174681