社区
Windows SDK/API
帖子详情
我开了一个线程,功能是用CopyFile拷贝许多文件,如果在别的地方中止这个线程,。。。。
nice521
2002-12-02 02:22:33
我开了一个线程,功能是用CopyFile拷贝许多文件,如果在别的地方中止这个线程,这时如果在硬盘上要
删除掉这个没有拷贝完的文件,则显示错误信息“文件正被使用“。我中止线程用Terminal,在线程的Execute中,我
设定了FreeOnTerminate:=true;这样的话,中止线程应该释放所有的资源吧。
如果我把这个程序关闭掉,则这个没有拷贝完的文件就可以删掉,什么道理?
...全文
165
13
打赏
收藏
我开了一个线程,功能是用CopyFile拷贝许多文件,如果在别的地方中止这个线程,。。。。
我开了一个线程,功能是用CopyFile拷贝许多文件,如果在别的地方中止这个线程,这时如果在硬盘上要 删除掉这个没有拷贝完的文件,则显示错误信息“文件正被使用“。我中止线程用Terminal,在线程的Execute中,我 设定了FreeOnTerminate:=true;这样的话,中止线程应该释放所有的资源吧。 如果我把这个程序关闭掉,则这个没有拷贝完的文件就可以删掉,什么道理?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
alphax
2002-12-04
打赏
举报
回复
对阿,应该先调用thd.Resume;再调用thd.Terminate;
ilovekof
2002-12-04
打赏
举报
回复
你的代码挂起进程后没有回复哎
stanely
2002-12-04
打赏
举报
回复
把你拷贝文件的代码贴出来
nice521
2002-12-04
打赏
举报
回复
也因为文件没有拷贝完,所以如果删除这个没有拷贝完的文件就出错,如果退出这个程序,则这个文件就可以删除掉,不知道什么道理。
nice521
2002-12-04
打赏
举报
回复
我的程序是这样的:在线程内部执行多个文件的拷贝,另外主程序可以让线程停止。
主程序这样:
Button1.click
{
thd.Suspend();
if(MessageBox(NULL,"备份还未完成,确定要停止?","确定",MB_OKCANCEL)=IDOK)
thd.Terminate();
}
在线程内部:
while not Terminated do
{
}
这样的话,在主程序中按下Button1,文件还是没有拷贝完线程就停止了,不知道什么原因?谢谢帮忙!!!
nice521
2002-12-04
打赏
举报
回复
谢谢你们,我程序的错误就是挂起进程后没有回复,应该先调用thd.Resume;再调用thd.Terminate。
stanely
2002-12-03
打赏
举报
回复
如果你使用了copyfile这个函数,那么这样的情况应该不会出现阿。
alphax
2002-12-03
打赏
举报
回复
CopyFile函数的情况我知道的不多,也不太明白你手动中止的意思,但是
对于FreeOnTerminate,只不过是在Execute函数结束时调用一下Free,至于
有没有关闭文件,要看你的Destroy实现。线程和进程的概念是不同的。
nice521
2002-12-03
打赏
举报
回复
“他们的生存期是进程的生存期“,对阿,线程都停止了,FreeOnTerminate:=true;应该释放掉所有线程占用的资源啊,包括占用文件。
用copyfile拷贝多个文件,我并没有显式关闭文件,但是正常拷贝结束时,由于设置了FreeOnTerminate:=true;所有的文件都自动地关闭了啊,同理,我手动中止
线程,也应该是同样的道理阿。
stanely
2002-12-03
打赏
举报
回复
只会执行完while里面的所有语句才能检测到terminated,这样才可能退出,所以copyfile产生的句柄不会来不及被释放阿,因为copyfile一定执行结束了!
stanely
2002-12-03
打赏
举报
回复
你的理解有误阿,
copyfile在线程内部是单步执行的阿,当copyfile执行结束以后才能继续执行线城内的其他代码。
而thread.terminate并不是强制让线程终止,只是改变terminated属性,变成true,而execute里面一般是这样子的:
while not terminated do
begin
copyfile....//永远不会把这个函数强制中断阿!上面的分析似乎有些不合理阿
end;
alphax
2002-12-02
打赏
举报
回复
你用Terminate中止线程以前或之后应该显式把所有用到的文件句柄释放(CloseHandle),比如CloseFile或者FileStream.Free。
像文件句柄这些核心对象不会随线程中止而自动释放的,他们的生存期是进程的生存期
BlueTrees
2002-12-02
打赏
举报
回复
打开文件有一个句柄,和进程关联,没有正确的释放句柄,很可能导致回滚。
API之网络函数---整理网络函数及
功能
VerFind
File
用这个函数决定
一个
文件
应安装到哪里 VerInstall
File
用这个函数安装
一个
文件
VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称 VerQueryValue 这个函数用于从版本资源中获取信息 ...
JUC多
线程
一个
采用了多
线程
技术的应用程序可以更好地利用系统资源。其主要优势在于充 分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使 得进程的整体运行效率得到较大提高,同时增强了应用程序的...
c# 关于根据
文件
修改日期来进行
拷贝
更新到其他位置的示例代码及思路
c# 根据
文件
修改日期来进行
拷贝
更新到其他位置的示例代码及思路
Java的I/O
在生活中,你需要将U盘的
文件
,
拷贝
到电脑(或者将电脑的
文件
拷贝
到其他设备),
文件
是通过数据流的方式依次到达另
一个
设备中,
文件
的
拷贝
就是
一个
输入(Input)和输出(Output)的过程 Java中提供对应的API支持...
windows编程常用系统API函数
windows编程常用API的函数1. API之网络函数2. API之消息函数3. API之
文件
处理函数4. API之打印函数5....WNetAddConnection 创建同
一个
网络资源的永久性连接 WNetAddConnection2 创建同
一个
网络资源的连接 W
Windows SDK/API
1,184
社区成员
22,326
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章