new 出来的线程对象,如何delete?

Michaellovekobe 2015-07-08 05:13:13
如题。
ThreadRead是继承了Qhread的类,当然重写了run,略不过提了。

在界面中,也就是MainWindow,点击按钮执行以下操作

ThreadRead *th_Read=new ThreadRead();
th_Read->start();


程序会执行线程函数

那么问题来了,工作中频繁的点击该按钮,如果不delete是不是会有内存未回收的问题?

改如何delete?
...全文
309 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuwq2015 2015-07-11
  • 打赏
  • 举报
回复
试试th_Read->deleteLater();
walry_dudu 2015-07-11
  • 打赏
  • 举报
回复
新线程跑完之后会发出finished信号,然后连接finished信号到deletelater槽就ok了
Michaellovekobe 2015-07-10
  • 打赏
  • 举报
回复
引用 2 楼 dext 的回复:
add this to constructor of your ThreadRead QObject::connect(this, SIGNAL(finished()), this, SLOT(deleteLater()));
学习了 我测试一下,然后给分
Michaellovekobe 2015-07-10
  • 打赏
  • 举报
回复
引用 3 楼 hxyzby 的回复:
如果频繁点,干嘛每次都要delete再new ,这不是降低效率嘛。 如果你线程不做判断,一直在运行的话。你可以在button的响应槽里,加入判断 //ThreadRead *th_Read=new ThreadRead(); // 这个把它放到其它地方定义,不要每次 new 它 //然后通过线程的状态判断,没启动就去启动它
if(th_Read)
{
  if ( !th_Read.isRunning())
{
th_Read->start();
}
}
如果你需要和线程互动,则可以在线程里加上标记,根据你在外部填入的值,执行不同的动作。
不是一直运行的,想用才用
dext 2015-07-09
  • 打赏
  • 举报
回复
add this to constructor of your ThreadRead QObject::connect(this, SIGNAL(finished()), this, SLOT(deleteLater()));
每件事 2015-07-09
  • 打赏
  • 举报
回复
如果频繁点,干嘛每次都要delete再new ,这不是降低效率嘛。 如果你线程不做判断,一直在运行的话。你可以在button的响应槽里,加入判断 //ThreadRead *th_Read=new ThreadRead(); // 这个把它放到其它地方定义,不要每次 new 它 //然后通过线程的状态判断,没启动就去启动它
if(th_Read)
{
  if ( !th_Read.isRunning())
{
th_Read->start();
}
}
如果你需要和线程互动,则可以在线程里加上标记,根据你在外部填入的值,执行不同的动作。
csdnbuku 2015-07-08
  • 打赏
  • 举报
回复
都说程序员除了new出来个对象,现实中都是没有对象的。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧