qt 线程 的问题

fight_flight 2010-09-29 10:57:16
线程类中重载的run函数运行结束后,是不是线程占据的内存资源会自动返还系统
...全文
239 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
swift19221 2011-08-30
  • 打赏
  • 举报
回复
一群菜鸟,
线程管理类和线程都没有分清楚!
还记得MFC的类吗? 与此类似。
一个MFC的类可能管理了一个GUI资源,比如窗口
当这个类析构的时候,被管理的GUI资源也会被删除,
除非在析构前调用了 detach(),

线程管理类就像MFC的类, 线程就像受MFC类管理的GUI资源
fight_flight 2010-10-11
  • 打赏
  • 举报
回复
这个线程里有使用界面一个控件的指针显示信息,当我把相应的语句屏蔽之后内存就不会增加了。这种情况要怎样就觉呢?是不是涉及资源的互斥呢?
mujianhua1982 2010-10-10
  • 打赏
  • 举报
回复
学习了!!!!!!
dbzhang800 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zecard_fu 的回复:]

引用 2 楼 qqyanchong 的回复:

run结束后线程的资源不会自动全部释放,因为现在只是结束了run整个的线程还是存在的,因而要释放必须完全的删除你的线程类才可以

存在吗? 我用命令 pstree 怎么发现不存在了?
[/Quote]
恩,不存在。Qt Manual中说:

The run() implementation is for a thread what the main() entry point is for the application. All code executed in a call stack that starts in the run() function is executed by the new thread, and the thread finishes when the function returns.
zecard_fu 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqyanchong 的回复:]

run结束后线程的资源不会自动全部释放,因为现在只是结束了run整个的线程还是存在的,因而要释放必须完全的删除你的线程类才可以
[/Quote]
存在吗? 我用命令 pstree 怎么发现不存在了?
khler 2010-10-02
  • 打赏
  • 举报
回复

不能简单的从观察系统的内存增减来判断程序是否内存泄露。

从你对fun1与fun2的描述来看,不存在内存泄漏问题,除非里面还有其他对内存的操作。
fight_flight 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqyanchong 的回复:]

run结束后线程的资源不会自动全部释放,因为现在只是结束了run整个的线程还是存在的,因而要释放必须完全的删除你的线程类才可以
[/Quote]

使用时new,用完后delete 吗?
是这样的,我在一个函数(fun1)中new一个线程并start它,线程运行一个socket客户端与服务端相连的代码,很快就执行完了。然后另一个函数(fun2)使其与服务端断开并delete这个线程。执行fun1时内存会相应增加,运行fun2时内存并没有相应减少。这是什么原因?
ljz0919 2010-09-30
  • 打赏
  • 举报
回复
发一点我自己用到的代码,看能否对你有帮助
DownProcThread::~DownProcThread()
{
mutex.lock();
abort = true;
condition.wakeOne();
mutex.unlock();

wait();
}
void DownProcThread::run()
{
forever{
// QMutexLocker locker(mutex);
mutex.lock();
//在此处理收到的报文,并发送报文。
if (abort)
return;
//emit txrxcmd(this->message());
emit begin485();
this->sleep(1);
mutex.unlock();
}
}
yanchong 2010-09-30
  • 打赏
  • 举报
回复
run结束后线程的资源不会自动全部释放,因为现在只是结束了run整个的线程还是存在的,因而要释放必须完全的删除你的线程类才可以
dext 2010-09-29
  • 打赏
  • 举报
回复
本质上还是和一般的方法一样吧。栈上的 就“返还”了,堆上的要自己释放吧。

16,211

社区成员

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

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