Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Потоки,Файлы,Поиск.

Ответить
Настройки темы
Delphi - [решено] Потоки,Файлы,Поиск.

Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Что я делаю не так?Я хочу когда включаешь поиск что бы можно было передвигать форму сворачивать итд.Но когда я скнирую Диск С на наличие файлов.Форма намертво виснет.
Вот исходник окна с кнопкой, Editом и Memo.
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Label1: 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);
var
NewThread: Thread;
begin
Memo1.Clear; // очистка списка файлов
Form1.Label1.Caption:='Сканирую!';
NewThread:=Thread.Create(True);
NewThread.Priority:=tpLower;
NewThread.FreeOnTerminate:=True;
NewThread.FindFile(Form1.Edit1.Text);
NewThread.Resume;
end;


end.


Вот исходник созданного файла потока:
unit Unit2;

interface

uses
Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF},SysUtils;

type
Thread = class(TThread)
private
Dir : string;
fff : string;
procedure SetName;
protected
procedure Execute; override;
public
procedure FindFile(Dir : string);
procedure Plus;
end;

implementation

uses Unit1, Unit3;

{ 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 Thread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }

{$IFDEF MSWINDOWS}
type
TThreadNameInfo = record
FType: LongWord; // must be 0x1000
FName: PChar; // pointer to name (in user address space)
FThreadID: LongWord; // thread ID (-1 indicates caller thread)
FFlags: LongWord; // reserved for future use, must be zero
end;
{$ENDIF}

{ Thread }

procedure Thread.SetName;
{$IFDEF MSWINDOWS}
var
ThreadNameInfo: TThreadNameInfo;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
ThreadNameInfo.FType := $1000;
ThreadNameInfo.FName := 'NewThread';
ThreadNameInfo.FThreadID := $FFFFFFFF;
ThreadNameInfo.FFlags := 0;

try
RaiseException( $406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo );
except
end;
{$ENDIF}
end;

procedure Thread.Execute;
begin
SetName;
if terminated then exit;
end;

procedure Thread.FindFile(Dir : String);
var
SR:TSearchRec;
FindRes:Integer;
begin
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
While FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name='.')or(SR.Name='..')) then
begin
FindRes:=FindNext(SR);
Continue;
end;

// åñëè íàéäåí êàòàëîã, òî
if ((SR.Attr and faDirectory)=faDirectory) then
begin
// âõîäèì â ïðîöåäóðó ïîèñêà ñ ïàðàìåòðàìè òåêóùåãî êàòàëîãà +
// êàòàëîã, ÷òî ìû íàøëè
FindFile(Dir+SR.Name+'\');
FindRes:=FindNext(SR);
// ïîñëå îñìîòðà âëîæåííîãî êàòàëîãà ìû ïðîäîëæàåì ïîèñê
// â ýòîì êàòàëîãå
Continue; // ïðîäîëæèòü öèêë
end;
fff:=SR.Name;
Synchronize(Plus);
FindRes:=FindNext(SR);
end;
FindClose(SR);
end;

procedure Thread.Plus;
begin
Form1.Memo1.Lines.Add(fff);
end;

end.

Что я делаю не так как нужно написать что бы не висла форма?

Отправлено: 15:50, 22-09-2011

 

Пользователь


Сообщения: 75
Благодарности: 0

Профиль | Отправить PM | Цитировать


Все Сам Решил!!!Спасибо!!!

Отправлено: 15:57, 22-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


надо поиск в отдельном потоке запускать и приоритет етого потока объявить ниже чем системный

Отправлено: 16:51, 28-10-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Потоки,Файлы,Поиск.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Builder 6.0 потоки alextrs Программирование и базы данных 2 17-04-2008 21:32
Проблемы: поиск и файлы панели управления Man itu Microsoft Windows 2000/XP 7 06-03-2005 00:53
Delphi - Delphi7, потоки mahsus Программирование и базы данных 1 19-10-2004 16:46
Потоки в VC++6.0 Guest Программирование и базы данных 1 20-02-2004 05:06
Файлы и потоки netmax Программирование и базы данных 1 14-05-2003 09:37




 
Переход