类型:转载 责任编辑:asp 日期:2007/03/01
我在住进程中有时间控件循环创建线程,每次要创建好多个,都是做一样的事情.
线程中需要new一个窗体,现在调试感觉好象是窗体没能释放资源.
我应用运行1小时就死了.cpu利用达到100%,就象进了死循环!
我在线程中delete form是不能用的!提示非法操作!
求各位大哥帮忙!
推荐阅读
窗体执行完任务后自己close,在onclose中设置action = cafree;
freeonterminate = true 干吗屏蔽了呀,
把这句恢复了试试
freeonterminate = true 这句感觉用不用没啥意义啊!!
表示的是线程退出时自动销毁
你怎么知道有100k的内存泄漏?看任务管理器的吗?那个不准确的.
任务管理器?你得用专门的分析工具,才能知道!
建议sleep时间长一点
freeonterminate = true 不是没啥意义,而是,我现在注释这句程序还能正常运行!
如果不注释,线程创建的时候马上报系统错误了!
估计线程还没完全释放你就创建了
你创建是应该先判断一下
用waitforsingleobject等到线程退出再创建
发送一个wm_close给窗体的handle不就解决了吗?
当然 窗体是 cafree 的 (在关闭时释放内存)
我看到的代码中只有一句
form2 = new tform2
并且不是在循环中,是不是form2只有一个实例?
action=cafree;和delete form2;只取其一。
或
void __fastcall tform2::formclose(tobject *sender, tcloseaction &action)
{
adoquery2->close();
clientsocket1->close();
action=cafree;
form2=nuill;
}
顺便跟踪一下
__fastcall kzthread::~kzthread()
{
delete form2;
}
如果没有执行,你可以:
void __fastcall kzthread::execute()
{
//---- place thread code here ----
while(!terminated){
isexit = false;
i=0;
while (i<30000)
{
if (isexit)
break;
sleep(1);
i++;
}
str = ip + " sendend";
synchronize(updatecaption);
}
delete form2;form2=null;
}