解决方案 »
- 图片水印
- 关于fsmdichild子窗体的问题?
- 提供Delphi 5的下载地址就给分!(要能下)
- 小媳妇提问啦,哪个哥哥能回答啊:)
- 关于InstallShield的打包问题
- 求救,如何得到TWebBrowser中的页面的内容?
- 能不能把OleContainer里的word文件写到paradox的Ole字段
- 请问我想在用户点击窗体右上角的关闭控制钮时,让用户确认是否真的关闭,应该怎么做??
- 给我意见,助我抉择(应就送分)(在Delphi,Java,人才热线开了3个帖子求助)
- delphi 的 blockread竟然不支持动态数据?还是我的错误?
- 本人有一个delphi开发应用程序,因为换了重装系统,程序无法登录进入,请求高手解决,有一定的金钱被偿,限深圳特区内,有意者请加qq:38128151
- 赋值语句出怪事了?
MyPara^.aUrl := 'http://www.baidu.com/?page=';
MyPara^.aPage := inttostr(i);
MyPara^.aXxx := 'W3c';
CreateThread(nil, 0, @aThreadRun, MyPara, 0, ID);
end;
//Dispose(MyPara); 这里能用这个吗?一用就异常
//MyPara:=nil; 这里能用这个吗?一用就异常以上的代码,后两句肯定是不能用的,因为CreateThread创建线程后就把MyPara给释放了,而这时线程函数aThreadRun正在用MyPara.要清楚一点的是CreateThread只是创建线程,创建成功后就立即返回了,具体执行是aThreadRun.
CreateThread函数返回线程句柄,你需要把所有的线程句柄记录下来,然后在合适的时机调用
SuspendThread或ResumeThread函数来暂停线程或恢复线程的运行,这两个函数都需要使用已
创建线程的句柄作参数
1楼关于这个问题的说明是正确的
具体解决的时候你可以在线程外申请Mypara的存储器,即调用New(MyPara);
在线程不再使用这个的时候在线程内部释放就可以了,即调用Dispose(MyPara)
...
aHandle := CreateThread(nil, 0, @aThreadRun, MyPara, 0, ID); ///
CloseHandle(aHandle);
...
Dispose(xParameter(p));
...
再有就是 String型变量内存的释放
还有个很严重问题就是:try ... except... 结构,我搞错了,最下面的 xxx.free 完全不会执行。最后用上了 try ... finally ... 结构,内存泄漏问题已解决,很开心。现在还有个问题就是:不知道如何随时暂停、继续已经运行的多个线程,估计那时不能立即关闭创建线程时产生的线程名柄了。