一道QT线程相关的题。急急急

时间:2023-02-21 23:55:06
一道QT线程相关的题。急急急

在QT用绘图事件写了个飞机大战,(全屏随机出现子弹,飞机只能躲避,需要大量子弹。)然而在主线程中绘制到 3 个子弹的时候, 运行出来窗口卡死,原因我怀疑是主线程用了7个定时器。然后想到把子弹的绘制,放到线程中?结果出错 ?看一下?




4 个解决方案

#1


一道QT线程相关的题。急急急
一道QT线程相关的题。急急急

一道QT线程相关的题。急急急
一道QT线程相关的题。急急急

#2


你的变量貌似是局部变量吧?怎么能到处传呢?而且由于是线程,你的变量还不能随意传递,因为可能会出现数据不一致bug,静态变量不能解决,volatile解决也会有问题,你只能把产生bx,by的内容迁移出来,要么作为一个函数在这里调用,要么直接放到这里面。

最原始的那个崩溃问题,卡死了,可能就是你的内存没及时释放(我看你指针用的就挺多的),或者某处逻辑陷入死循环。找出来解决掉就好了

#3


在c++11中,传值只能std::ref(),楼主这个我不知道

#4


对控件的操作应该在产生控件的线程(一般是主线程)进行,由子线程发消息,主线程去操作控件。

另外你3个子弹卡死应该和定时器没有关系,虽然定时器太多了,加个断电再查一下吧

#1


一道QT线程相关的题。急急急
一道QT线程相关的题。急急急

一道QT线程相关的题。急急急
一道QT线程相关的题。急急急

#2


你的变量貌似是局部变量吧?怎么能到处传呢?而且由于是线程,你的变量还不能随意传递,因为可能会出现数据不一致bug,静态变量不能解决,volatile解决也会有问题,你只能把产生bx,by的内容迁移出来,要么作为一个函数在这里调用,要么直接放到这里面。

最原始的那个崩溃问题,卡死了,可能就是你的内存没及时释放(我看你指针用的就挺多的),或者某处逻辑陷入死循环。找出来解决掉就好了

#3


在c++11中,传值只能std::ref(),楼主这个我不知道

#4


对控件的操作应该在产生控件的线程(一般是主线程)进行,由子线程发消息,主线程去操作控件。

另外你3个子弹卡死应该和定时器没有关系,虽然定时器太多了,加个断电再查一下吧