今日计划

Milestone Target:制作一个支持端点续传的HTTP协议的文件下载工具。——DONE

memo:早上起来再说吧……
memo:通过设置Request.ContentRangeStart可以从中段开始下载了

1、学习DUnit的使用——OK
memo:学会了简单的使用
memo:弄了一个DUnitWizard
memo:DUnit要新开一个工程来做测试,做Embeded测试不是很方便。所以还要学习工程间的Unit互相引用
memo:放弃DUnitWizard
result:使用手工创建新的测试项目,学会了基本的使用。
memo:放弃的原因是那个can not find resource file……后来发现原来是一个known bug,这么严重的bug
memo:看来还是要忍受一下这个bug,毕竟自动生成要省事许多。

2、多工程的使用,和对Delphi的类的使用的熟悉——OK
memo:由学习DUnit而来
memo:创建两个工程,一个为工作工程,一个是测试工程。工作工程的内容是一个做简单加法的类,提供public的接口。测试工程就加法类的接口进行测试。
result:创建Delphi的类没什么难的。工程之间的Unit互相引用只需要给单元名就可以了。

3、把昨天的简单下载工具完善——OK
memo:增加了本地位置选择的对话框
memo:增加了断点续传功能,根据本地已下载文件的大小来确定中断位置
result:https://files.cnblogs.com/taowen/SimpleHTTPDonwloader2.rar

Milestone Target:把下载工具的下载功能独立到新的线程之中,防止界面的僵死——DONE

1、学会开一个新线程——OK
2、学习Delphi的命名规则——OK
3、开了新线程来下载,但是界面还是僵死,解决ing——OK
memo:怀疑是因为IdHTTP是在主线程创建的,而不是在副线程创建导致了问题
memo:发现导致创建了新线程还是让主线程等待的原因是使用了:Synchronize。正在学习Synchronize的作用……
result:由于把IdHTTP变成副线程中创建,所以不再需要调用Synchronize来访问Get方法,从而不再需要主线程的等待了。
4、增加对下载按钮Enable属性的切换——OK
5、把Downloading状态用属性来记录,使得写方法能自动调用Refresh——OK
6、代码重构——OK
7、用procedure指针代替了副线程直接操作主线程——OK
8、发现一个bug:因为是用是否已经存在本地文件来判断是否采用续传,当本地文件已经完全下载了之后,再次下载会因为已经存在本地文件导致重复下载附着到原文件之后。——OK
memo:原因是因为设置ContentRangeStart为ContentLength之后,下载不是零字节,而是完全重新下载。所以这种判定需要自己来做。
memo:在文件存在的时候,判定尺寸是小于,等于还是大于远程文件。
result:https://files.cnblogs.com/taowen/SimpleHTTPDownloader3.rar

原文地址:https://www.cnblogs.com/taowen/p/28472.html