Показать сообщение отдельно
  #2  
Старый 16.02.2009, 12:05
k@Z@k k@Z@k вне форума
Новичок
 
Регистрация: 31.07.2007
Сообщения: 55
Репутация: 12
По умолчанию

Я такое писал, создавал поток который сканит выбранную папку на наличие файлов по заранее известной маске, в зависимости от файла выполняет действия.
модуль потока
Код:
unit ScanDir;
interface
uses
  Classes, Windows, SysUtils;

type
  FParam = record
    ID: integer;
    Str: string; // путь к директории с файлами
    Name: string; // имя потока
    FName: string; // маска файла
  end;

  TScanDir = class(TThread)
  public
    constructor Create(Param: FParam);
  private
  protected
    P: FParam;
    procedure Execute; override;
  end;

implementation

uses
  main; // модуль с формой

procedure TScanDir.Execute;
var
  r: Cardinal;
  fn: THandle;
  SRec: TSearchRec;
begin
  fn := FindFirstChangeNotification(pChar(P.str), True,
    FILE_NOTIFY_CHANGE_FILE_NAME);
  repeat
    r := WaitForSingleObject(fn, 1000);
    if r = WAIT_OBJECT_0 then
      begin
        if FindFirst(P.Str + '\' + P.AName, faAnyFile, SRec) = 0 then
          repeat
            GlobalThreadID := p.ID;                      // глобальные переменные
            GlobalThreadName := p.Name;             // чтобы в статистике знать
            GlobalThreadDir := p.Str;                    // какой поток сработал   
            GlobalThreadFile := SRec.Name;
            Synchronize(Form1.UpdateMemo);
            Synchronize(form1.ExtractFile);
          until FindNext(SRec) <> 0;
        FindClose(SRec);
      end;
    if not FindNextChangeNotification(fn) then
      break;
  until Terminated;
  FindCloseChangeNotification(fn);
end;

constructor TScanDir.Create(Param: FParam);
begin
  inherited Create(true);
  P := Param;
end;

end.

ну и соответственно запускаешь потоки из основной программы
Код:
...
var
   ThreadScanDir: TScanDir;
....
      ThreadScanDir := TScanDir.Create(Param);
      ThreadScanDir.FreeOnTerminate := true;
      ThreadScanDir.Priority := tplower;
      ThreadScanDir.Resume;
Ответить с цитированием