multithreading - 使用新线程进行FTP上传并等待上传完成

标签 multithreading delphi ftp delphi-xe

我似乎无法弄清楚自己在做什么,我有以下代码将文件上传到ftp,该文件位于新线程上,如何告诉它等待上传完成然后继续?

procedure TFTPThread.Execute;
begin
  FTPClient.Host:=FTPAddress;
  FTPClient.Username:=FTPUsername;
  FTPClient.Password:=FTPPassword;
  FTPClient.Connect;
  FTPClient.Put(ZipFileName,'Logs.zip');
  FTPClient.Quit;
  FTPClient.Disconnect;
end;

我在网上找到了这个,但是我不确定自己做错了什么:

E2233此处无法访问属性“句柄”
  while WaitForSingleObject(TFTPThread.Handle, 0) = WAIT_TIMEOUT do
  Application.ProcessMessages;

最佳答案

TIdFTP.Put()是一种阻止方法,只有在上传完成后才会退出。因此,根据设计,线程本身已经在等待。

您的编译器错误是因为您尝试从Handle类类型本身访问TFTPThread属性,但未将其声明为class属性,因此您无法这样做。您需要通过指向Handle对象的指针访问TFTPThread属性:

FTPThread := TFTPThread.Create;
...
while WaitForSingleObject(FTPThread.Handle, 0) = WAIT_TIMEOUT do
  Application.ProcessMessages;

另一方面,TThread有其自己的WaitFor()方法,您无需直接调用WaitForSingleObject()(除非您要指定WaitFor()不支持的非无限超时):
FTPThread := TFTPThread.Create;
...
FTPThread.WaitFor;

关于multithreading - 使用新线程进行FTP上传并等待上传完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431214/

相关文章:

python - 线程中的 SSL 错误与 python 中的简单发布请求

delphi - 如何在 Delphi 2010 中的 TTrackBar 上设置自定义刻度?

mysql - (内部)加入 if then 语句

c# - .NET WinSCP,只下载新文件

Python ftplib STORE 可靠吗?

android - 在 Android 上使用 Ormlite 进行多线程读取的性能

android - 在 IntentService 和 AsyncTask (Android) 之间使用共享代码时出现 Realm `access from incorrect thread` 错误

Delphi XE2 DataSnap 服务器 - HTTPS 'Could not load certificate'

ftp - 如何在计算机上设置 FTP 服务器?

c++ - 多线程和 pthread_join