![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с потоком как организовать? [D7, XP]
Xmen © (2012-11-21 15:15:00)Привет мастерам.
Есть форма в котором подготавливается файл для отправки в филиал (типа почтовый клиент). Выбирается файл или несколько файлы для отправки. после нажатия кнопки отправки файл архивируется и пери именуется по шаблону и помешается в папку для отправки. Каждый 5 минут проверяется папка приёма файлов если там есть файл то он перемешается в нужную папку. Теперь вопрос как можно сделать так чтобы приём файла была в отдельном потоке и пака принимается файл не зависала программа.
Xmen (2012-11-27 15:45:00) [21]Спасибо.
Как можно обращаться?
Amoeba_ (2012-11-27 15:42:00) [22]
> procedure myTr.Execute;
> var path:string;
> begin
> path:= ExtractFilePath(Application.ExeName);
> Form1.label2.Caption:='start';
> copyfile(PChar(path+'1\1.avi'),PChar(path+'2\1.avi'),false);
>
> Form1.label2.Caption:='2';
> copyfile(PChar(path+'1\2.avi'),PChar(path+'2\2.avi'),false);
>
> Form1.label2.Caption:='3';
> copyfile(PChar(path+'1\3.avi'),PChar(path+'2\3.avi'),false);
>
> Form1.label2.Caption:='end';
> end;
RTFM! То, что подчеркнутоесть обращение к VCL, а к ней обращаться напрямую из Execute потока нельзя!
Xmen (2012-11-27 15:18:00) [23]по примерам из статьи сделал простую прогу. 3 кнопки 1 и 2 для проверки формы а 3 для копирования в потоке. Файлы по 4 гига после каждого копирования должно менятся капшен в 2 лейбеле.
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses myTread;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:='Button 1';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
label1.Caption:='Button 2';
end;
procedure TForm1.Button3Click(Sender: TObject);
var myThd: myTr;
begin
myThd := myTr.Create(True);
myThd.FreeOnTerminate := True;
try
myThd.Resume;
except on EConvertError do
begin
myThd.Free;
ShowMessage('Ne poluchaetsya skachat!');
end;
end;
end;
end.
unit myTread;
interface
uses
Forms, SysUtils, Windows, Classes;
type
myTr = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
implementation
uses main;
procedure myTr.Execute;
var path:string;
begin
path:= ExtractFilePath(Application.ExeName);
Form1.label2.Caption:='start';
copyfile(PChar(path+'1\1.avi'),PChar(path+'2\1.avi'),false);
Form1.label2.Caption:='2';
copyfile(PChar(path+'1\2.avi'),PChar(path+'2\2.avi'),false);
Form1.label2.Caption:='3';
copyfile(PChar(path+'1\3.avi'),PChar(path+'2\3.avi'),false);
Form1.label2.Caption:='end';
end;
end.
DVM (2012-11-21 15:56:00) [24]
> Xmen (21.11.12 15:38) [2]
"Multithreading - The Delphi Way"
"Многопоточность - как это делается в Дельфи"
Martin Harvey.
Version 1.1a
http://forum.vingrad.ru/topic-60076.html
Подробнее уж некуда. Там и с примерами и т.д.
Xmen (2012-11-21 15:38:00) [25]Пару раз из примеров взял код выполнил не получился. Потоки для меня все еще не понятен.
DVM (2012-11-21 15:27:00) [26]
> Теперь вопрос как можно сделать так чтобы приём файла была
> в отдельном потоке и пака принимается файл не зависала программа.
>
Создать поток и перенести код приема туда? В чем вопрос непонятно.