Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2010, 13:34   #1
Vadik(R)
Пользователь
 
Регистрация: 10.03.2008
Сообщений: 68
Вопрос FTP и потоки. Не работает.

Люди, решил сделать фтп менеджер, заодно потренироваться работать с потоками. В отдельности и то и то получается сделать, а вместе - нет. Скажите, как надо исправить код, чтобы он работал (делфи 7, не работает - просто не закачивает файлы, без потоков закачивает).
Unit1:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XPMan, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  UploadThread.Create(Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text);
end;

end.
Unit2:
Код:
unit Unit2;

interface

uses
  Classes;

type
  UploadThread = class(TThread)
  private
    Fhost: String;
    Fusername: String;
    Fpassword: String;
    Ffilename: String;
  protected
    procedure Execute; override;
  public
    constructor Create(host, username, password, filename: string);
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure UploadThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ UploadThread }

uses
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdFTP,
  IdFTPCommon;

constructor UploadThread.Create(host, username, password, filename: string);
begin
  Fhost:=host;
  Fusername:=username;
  Fpassword:=password;
  Ffilename:=filename;
  inherited Create(False);
end;

procedure UploadThread.Execute;
var
  IdFTP1: TIdFTP;
begin
  IdFTP1:=TIdFTP.Create(IdFTP1);
  IdFTP1.Host:=Fhost;
  IdFTP1.Username:=Fusername;
  IdFTP1.Password:=Fpassword;
  IdFTP1.Connect;
  IdFTP1.TransferType:=ftBinary;
  IdFTP1.Put(Ffilename, Ffilename);
  IdFTP1.Quit;
  IdFTP1.Free;
end;

end.
При чем тут раздел "Компоненты" ?
Переношу.

Последний раз редактировалось mihali4; 07.02.2010 в 14:09.
Vadik(R) вне форума Ответить с цитированием
Старый 07.02.2010, 14:47   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  UploadThread.Create(Edit1.Text, Edit2.Text, Edit3.Text, Edit4.Text);
end;
где переменная в которую будет сохранен созданный объект?
вернее так где переменная с помощью которой, мы сможем управлять созданным объектом?
где вызов созданного потока на исполнение?
Цитата:
Код:
 IdFTP1:=TIdFTP.Create(IdFTP1);
что это такое?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.02.2010 в 14:54.
evg_m вне форума Ответить с цитированием
Старый 07.02.2010, 15:20   #3
Vadik(R)
Пользователь
 
Регистрация: 10.03.2008
Сообщений: 68
По умолчанию

Я и не думал управлять потоком, я просто его создал, в моём случае не стоит волноваться о его выполнении, он сам завершиться, не возвращая никакого результата.
А вот второй комментарий мне интересен. А как же мне создать для потока компонент InFTP? Я планировал так и сделать, чтобы для каждого потока этот объект создавался и в конце выполнения потока удалялся.
Vadik(R) вне форума Ответить с цитированием
Старый 07.02.2010, 17:24   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

запуск потока на выполнение есть одна из задач управления

читайте что есть Tcomponent.Owner +F1
Tcomponent.Create +F1

call Create and pass in an owner component as the AOwner parameter. The owner disposes of the component when it is destroyed. If the component is not owned, then use Free when it needs to be destroyed.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки в С++ BioS Общие вопросы C/C++ 2 09.01.2010 21:34
Потоки AidarBik Win Api 2 04.08.2008 10:00
Потоки в С Raptor Помощь студентам 1 07.01.2008 21:12