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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2008, 19:23   #1
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию Проблема с потоками

Я хочу организовать поиск файлов потоком.
Сделал все нормально но тока работает так как и без потока(кнопки не какие в проге не работают когда идет поиск)
я делаю так:
при нажатии на кнопку старт создаю поток(create)
и пишу resume
в потоке вот такой код

Код:
unit unirrrrrr;

interface

uses
  Classes,windows,sysutils,dialogs;

type
  TAttack = class(TThread)
  private
  procedure ScanDir;
  procedure ScanAllDrives;
  protected
  procedure Execute; override;
  public

  action:(TvscanDir,TvScanFile);
  filename:string;
  dirname:string;
  ScanDrives:boolean;
  end;

var
thread:Tattack;
implementation

procedure TAttack.Execute;
var i:integer;
begin
if not ScanDrives then begin
if action=TvScanDir then Synchronize(ScanDir);
end else  Synchronize(scanAllDrives);
end;

Procedure Tattack.ScanAllDrives;
begin
ScanAllDrivesA;
end;

procedure Tattack.ScanDir;
begin
ScanDirA(dirname);
end;


procedure ScanDirA(Dir:String);
Var
  SR:TSearchRec;
  FindRes,i:Integer;
  EX : String;
begin
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
While FindRes=0 do
begin
  if (sr.Attr and FaDirectory)=Fadirectory then
  begin
    if (sr.Name='.') or (sr.Name='..') then
    begin
      FindRes:=findnext(sr);
      continue;
    end else
    begin
      ScanDirA(dir+sr.Name+'\');
      FindRes:=findnext(sr);
      continue;
    end;
  end;
  Ex := ExtractFileExt(Dir+SR.Name);
   for i:=0 to ext.Count-1 do
   if  LowerCase(Ex) = Ext[i] then
     begin

     //showmessage(dir+sr.Name);
      end;
FindRes:=FindNext(SR);
end;
FindClose(SR);
end;


procedure ScanAllDrivesA;
var
i,disk:integer;
buffer:array[0..1023]of char;
s:string;
begin
i:=0;
s:='';
disk:=GetLogicalDriveStrings(sizeof(buffer),buffer);
while i<disk do
begin
  if buffer[i]<>#0 then
  begin
    s:=s+buffer[i];
    inc(i);
  end else
  begin
  inc(i);
  if GetDriveType(PChar(S))=DRIVE_FIXED then scanDira(Pchar(s));
  s:='';
  end;
end;
end;
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 11.03.2008, 22:35   #2
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

решил проблему убрав Synchronize
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с потоками DeeNamid Общие вопросы Delphi 2 04.08.2008 17:36
работа с потоками Alex_Pro Общие вопросы .NET 1 01.07.2008 07:25
Как грамотно разделить данные между потоками? bagulma Общие вопросы Delphi 5 28.05.2008 22:41
C++, работа с потоками mat90x Помощь студентам 20 15.05.2008 22:20
Ошибка при работе с потоками vitalik007 Общие вопросы Delphi 6 09.03.2008 09:25