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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2014, 21:40   #1
ByMorgun
Пользователь
 
Регистрация: 13.06.2014
Сообщений: 24
По умолчанию Поток + idFTP

Всем дарова!
Не уверен, писать нужно в эту тему, или связанную с сетями, написал в эту.
Ближе к делу.
С потоками я никогда до этого не сталкивался и никогда ранее не использовал их, но вот, мне нужно использовать поток в следующей программе.
Почитал в инете о потоках,в итоге создал я поток таким образом:

В начало
Код:
  TMyThread = class(TThread)
    private
 
  protected
    procedure Execute; override;
  end;
потом ниже в var
Код:
 MyThread: TMyThread;
ну и создал процедуру
Код:
procedure TMyThread.Execute;
begin

end;
запускаю поток таким образом:
Код:
MyThread:=TMyThread.Create(False);
MyThread.Priority:=tpNormal;
Так все работает, для теста поместил showmessage в поток, проверил, все работает. но когда я пишу нужные мне действия в потоке, появляется ошибка при компиляции, в самой программе никакой ошибки не показывает, но и не выполняет действия из потока.
Теперь подробнее о действии. вот так выглядит поток у меня.
Код:
procedure TMyThread.Execute;
var
idftp : TIdFTP;
begin
showmessage('save');
idftp.Create(nil);
idftp.Host:='тут пишу хост';
idftp.Username:='тут юзернейм';
idftp.Password:='пасс';
idftp.Passive := True;
idftp.Connect;
idftp.Put('C:\log.txt','log2.txt',false);
idftp.DisConnect;
MyThread.Destroy;
end;
Появляется шоумесседж с текстом сейв, а потом выдает компилятор вот такое окно

что делать?
ByMorgun вне форума Ответить с цитированием
Старый 13.06.2014, 22:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
idftp.Create(nil);
Шито это такое??
Код:
idftp:=TIdFTP.Create(nil);
И освободить IdFTP забываешь.
Цитата:
MyThread.Destroy;
А это шито??
Поставь FreeOnterminated:=true для потока и пусть сам чистится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 22:21   #3
ByMorgun
Пользователь
 
Регистрация: 13.06.2014
Сообщений: 24
По умолчанию

так, создание idftp я поменяю сейчас, а вот насчет "пусть сам чистится"?
Дело в том, что поток у меня будет запускаться по таймеру постоянно. Как лучше это делать? Стоит ли его дестроить вообще? Таймер примерно на 5-10 минут. Как в этом случае лучше сделать, и запускать его так же само в этом случае?
ByMorgun вне форума Ответить с цитированием
Старый 13.06.2014, 22:21   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

еще один с showmessage в доп. потоке..
а это MyThread.Destroy; что за выкрутасы?
eval вне форума Ответить с цитированием
Старый 13.06.2014, 22:27   #5
ByMorgun
Пользователь
 
Регистрация: 13.06.2014
Сообщений: 24
По умолчанию

Цитата:
а это MyThread.Destroy; что за выкрутасы?
Ну я думал сделать такую систему. Создается поток, выполняется, потом уничтожается. Потом опять по новой))) Подскажите как правильней?
ByMorgun вне форума Ответить с цитированием
Старый 13.06.2014, 22:27   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ByMorgun
Давай ты лучше расскажешь что именно ты пишешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 22:31   #7
ByMorgun
Пользователь
 
Регистрация: 13.06.2014
Сообщений: 24
По умолчанию

есть на компьютере файл под названием лог, он постоянно меняется. Мне нужно загружать этот файл на фтп сервер каждые 5-10 минут. Я подумал что лучше это делать через поток, потому что этот файл может достигнуть и несколько десятков мегабайт. Помимо этого программа выполняет вторичные функции. Я до этого не работал с потоками, но прочитал, что если выполнять действие в потоке, оно не будет останавливать работу основной программы. Получается что при закачке файла на фтп программа не будет приостанавливаться даже на несколько секунд.
ByMorgun вне форума Ответить с цитированием
Старый 13.06.2014, 22:42   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Помимо этого программа выполняет вторичные функции.
Рассказывай. Потому что лично я задачу
Цитата:
загружать этот файл на фтп сервер каждые 5-10 минут.
обычно решаю бат или баш скриптом, поставленным в планировщик задач операционки, а не пишу нативную программу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.06.2014, 14:26   #9
ByMorgun
Пользователь
 
Регистрация: 13.06.2014
Сообщений: 24
По умолчанию

проблему решил, перенес из потока в основную программу и не мучился с потоками
ByMorgun вне форума Ответить с цитированием
Старый 14.06.2014, 14:55   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

правильно, лучшее решение - выстрел в голову, и всехдел
eval вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Вопрос по idFTP Чиполлино Компоненты Delphi 3 08.01.2012 17:02
Работа с idFTP kettanaito Работа с сетью в Delphi 6 24.12.2011 21:54
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
idFTP и TreeView vitawt Работа с сетью в Delphi 3 21.02.2009 02:04