我开了一个线程,功能是用CopyFile拷贝许多文件,如果在别的地方中止这个线程,这时如果在硬盘上要
删除掉这个没有拷贝完的文件,则显示错误信息“文件正被使用“。我中止线程用Terminal,在线程的Execute中,我
设定了FreeOnTerminate:=true;这样的话,中止线程应该释放所有的资源吧。
如果我把这个程序关闭掉,则这个没有拷贝完的文件就可以删掉,什么道理?
删除掉这个没有拷贝完的文件,则显示错误信息“文件正被使用“。我中止线程用Terminal,在线程的Execute中,我
设定了FreeOnTerminate:=true;这样的话,中止线程应该释放所有的资源吧。
如果我把这个程序关闭掉,则这个没有拷贝完的文件就可以删掉,什么道理?
解决方案 »
- 请问各位大侠如何对Access中两个表里的数量这一项进行相减,并将结果显示出来。
- 请问如何保存 panel 的 parent属性,以便回头使用
- 解决远程连接数据库时获取数据的速度问题。(分不够再加)
- delphi dbgrid中如何多选,请给指点一下,急呀,谢谢
- 是不是现在CSDN庙搞大了,什么样的人都有了,做版主可以这样处理和回复了?
- 怎样配置delphi:已定义好的变量或控件名称中如果有大小写区分,那幺在delphi编辑器中无论数大写还是小写总是和定义的相同,怎样配置?多
- 如何解决COM+组件不能过网关的问题?
- 我是刚从VB转到DELPHI的!!!!!
- 如何在DELPHI中修改RAVE项目中的DriverDataview的queryparams值?
- 如何通过窗体的句柄来访问窗体中的控件,如果是EDIT则返回EDIT的TEXT
- 急聘杭州市区DELPHI程序员
- 这样的转换怎么实现?
像文件句柄这些核心对象不会随线程中止而自动释放的,他们的生存期是进程的生存期
用copyfile拷贝多个文件,我并没有显式关闭文件,但是正常拷贝结束时,由于设置了FreeOnTerminate:=true;所有的文件都自动地关闭了啊,同理,我手动中止
线程,也应该是同样的道理阿。
对于FreeOnTerminate,只不过是在Execute函数结束时调用一下Free,至于
有没有关闭文件,要看你的Destroy实现。线程和进程的概念是不同的。
while not terminated do
begin
copyfile....//永远不会把这个函数强制中断阿!上面的分析似乎有些不合理阿
end;
我的程序是这样的:在线程内部执行多个文件的拷贝,另外主程序可以让线程停止。
主程序这样:
Button1.click
{
thd.Suspend();
if(MessageBox(NULL,"备份还未完成,确定要停止?","确定",MB_OKCANCEL)=IDOK)
thd.Terminate();
}
在线程内部:
while not Terminated do
{
}
这样的话,在主程序中按下Button1,文件还是没有拷贝完线程就停止了,不知道什么原因?谢谢帮忙!!!