我的程序,有一个用计时器做的捕捉图片,生成文件
另外开了一个线程,上传图片到服务器上. 我在timer里的创建上传线程
hthread := CreateThread(nil, //Security attribute
0, //Initial Stack
@ThreadFunc, //上传函数
nil, //argument of thread
0, // Create flags
ThreadID); // thread ID
if hthread = 0 then
begin
showMessage( '无线程! ');
end; 上传函数:
procedure ThreadFunc(Flag: boolean) stdcall;
var
setUpFile : Tinifile;
ftpAddress : string;
ftpUname : string;
ftpPwd : string;
ftpPicPath : string;
led_Id : string; begin
setUpFile := Tinifile.create(extractfiledir(application.ExeName)+ '\setup.ini ');
ftpAddress := setUpFile.readstring( 'FTP地址 ', 'ftp_address ', ' ');
ftpUname := setUpFile.readstring( 'FTP用户名 ', 'ftp_uname ', ' ');
ftpPwd := setUpFile.readstring( 'FTP登陆密码 ', 'ftp_pwd ', ' ');
ftpPicPath := setUpFile.readstring( 'FTP图片地址 ', 'ftp_pic_path ', ' ');
led_Id := setUpFile.readstring( '屏号 ', 'screenid ', ' ');
setUpFile.free;
with DLink_Form.idftp1 do
try
Username:= ftpUname;
Password:= ftpPwd;
Host:= ftpAddress;
//passive:=true;
if not Connected then
begin
connect;
end;
except
showmessage( '程序异常退出 ');
end; if DLink_Form.IdFtp1.Connected then
begin
//DLink_Form.idftp1.Delete(DLink_Form.idftp1.RetrieveCurrentDir+ftpPicPath+led_Id+ '.jpg ');
DLink_Form.idftp1.Put(extractfiledir(application.ExeName)+ '\test.jpg ',DLink_Form.idftp1.RetrieveCurrentDir+ftpPicPath+led_Id+ '.jpg ',false);
DLink_Form.idftp1.disconnect;
end
else
begin
application.MessageBox( 'FTP没有连上! ', '提示: ');
end;
Play_Form.mainTemp := 0; //全局变量,在TIMER里面判断它,然后做捕捉图片的程序。
end;
执行几次,有时是几分钟,有时长点时间,到idftp1.Put的时候就出现错误了
EIdprotocolRelyError with message Port Command的提示 网上搜过几个答案,我把idftp1.passive := true;会出现连接错误
另外开了一个线程,上传图片到服务器上. 我在timer里的创建上传线程
hthread := CreateThread(nil, //Security attribute
0, //Initial Stack
@ThreadFunc, //上传函数
nil, //argument of thread
0, // Create flags
ThreadID); // thread ID
if hthread = 0 then
begin
showMessage( '无线程! ');
end; 上传函数:
procedure ThreadFunc(Flag: boolean) stdcall;
var
setUpFile : Tinifile;
ftpAddress : string;
ftpUname : string;
ftpPwd : string;
ftpPicPath : string;
led_Id : string; begin
setUpFile := Tinifile.create(extractfiledir(application.ExeName)+ '\setup.ini ');
ftpAddress := setUpFile.readstring( 'FTP地址 ', 'ftp_address ', ' ');
ftpUname := setUpFile.readstring( 'FTP用户名 ', 'ftp_uname ', ' ');
ftpPwd := setUpFile.readstring( 'FTP登陆密码 ', 'ftp_pwd ', ' ');
ftpPicPath := setUpFile.readstring( 'FTP图片地址 ', 'ftp_pic_path ', ' ');
led_Id := setUpFile.readstring( '屏号 ', 'screenid ', ' ');
setUpFile.free;
with DLink_Form.idftp1 do
try
Username:= ftpUname;
Password:= ftpPwd;
Host:= ftpAddress;
//passive:=true;
if not Connected then
begin
connect;
end;
except
showmessage( '程序异常退出 ');
end; if DLink_Form.IdFtp1.Connected then
begin
//DLink_Form.idftp1.Delete(DLink_Form.idftp1.RetrieveCurrentDir+ftpPicPath+led_Id+ '.jpg ');
DLink_Form.idftp1.Put(extractfiledir(application.ExeName)+ '\test.jpg ',DLink_Form.idftp1.RetrieveCurrentDir+ftpPicPath+led_Id+ '.jpg ',false);
DLink_Form.idftp1.disconnect;
end
else
begin
application.MessageBox( 'FTP没有连上! ', '提示: ');
end;
Play_Form.mainTemp := 0; //全局变量,在TIMER里面判断它,然后做捕捉图片的程序。
end;
执行几次,有时是几分钟,有时长点时间,到idftp1.Put的时候就出现错误了
EIdprotocolRelyError with message Port Command的提示 网上搜过几个答案,我把idftp1.passive := true;会出现连接错误
解决方案 »
- 关于一个线程问题的求救
- MDI子窗体ShowModal后的窗体,如何访问MDI子窗体的控件呢?
- 关于Access数据库Select后更新的问题
- 好长时间没来CSDN了我参与的问题怎么都没了
- Delphi 2006 功能强大,还是VS.NET 2005功能强大 如果说VS的话,DELPHI 2006到底落后多少?
- DateTimePicker1简单问题
- 递归算法,求解!
- 如何在被人的计算机上运行数据库程序
- Pchar对象的值为'E:\Folder\ttt.txt', 要求得到E:\Folder该用什么函数或方法啊?
- Delphi问题,timeGetTime
- 再问
- 有form1,form2,....form10,怎样定义窗体数组,并动态显示.
源码太复杂,没去研究,我现在用的方法是给它个错误计数器,如果一个上传组件上传过程中遇到的错误数超过一定数值,就释放它,重新create一个
to ysai : 你是用捕捉异常的方法计算错误次数的吧,你指的重新创建一个组件是怎么做的,我没有做过
它是可视组件,该怎么创建
你不会用代码创建组件吗?
把原来的free,再用代码创建一次不就行了
我的idftp组件是动态创建的,它属于一个对象,对象有个错误计数器,如果错误数太多,就
FIdFTP.Free;
FIdFTP := TIdFTP.Create(nil);
......//设置属性
因为我在之后的捕捉图片,刷新上传的图片的时候,提示错误,另一个程序正在使用此文件
怎样判断FIdFTP的put上传已经完全释放了对文件的操作呢