Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

TThread + ListBox + FindNext   Найти похожие ветки 

 
diabolik_krsk   (2005-03-10 07:20) [0]

Мастера, такая проблемка.

Есть процедура в основной форме

procedure TMain.AddFileToList;
var SearchRec: TSearchRec;
begin
 if FindFirst(ExtractFilePath(ParamString(0))+"moduls\"+"*.mod", faAnyFile, SearchRec) = 0 then
  begin
    while FindNext(SearchRec) = 0 do
      begin
        if (SearchRec.Name <> "..") and (SearchRec.Name <> ".")
        then
          begin
            ListBox.Items.Add(SearchRec.Name);
          end;
      end;
   FindClose(SearchRec);
end;


эта процедура вызывается из потока в отдельном юните


procedure TFileThread.Execute;
HandleChange: THandle;
begin
 HandleChange := FindFirstChangeNotification(PChar(FPath),
False, FILE_NOTIFY_CHANGE_FILE_NAME);
 Win32Check(HandleChange <> INVALID_HANDLE_VALUE);
   while WaitForSingleObject(HandleChange, 1000) = WAIT_OBJECT_0 do
     begin
       Synchronize(Update);
       FindNextChangeNotification(FNotifier)
     end
end;

procedure TFileThread.Update;
begin
 Main.AddFileToList;
end;


А вот теперь самое главное: если каталог пустой и в него добавить файл с расширением *.mod (тот который нам нужен) в ListBox он добавляется аж пять раз. Та же история если файлов 2,3 и более. Пробовал через точки остановки проверить где проблема - оказалось что поток вызывает Synchronize пять раз => пять файлов в ListBox/

Подскажите как лечить!


 
diabolik_krsk   (2005-03-10 07:21) [1]

Ошибочка. там где FindNextChangeNotification(FNotifier) должно быть FindNextChangeNotification(HandleChange)


 
Юрий Зотов ©   (2005-03-10 07:45) [2]

И еще - нет FindCloseChangeNotification. Будет утечка ресурсов.

Вообще, код ожидания выглядит не слишком надежно. Если система окажется чем-то занята и через секунду очередное уведомление не поступит, то цикл прервется по таймауту и поток завершится.


 
diabolik_krsk   (2005-03-10 08:52) [3]

2 Юрий Зотов
И еще - нет FindCloseChangeNotification. Будет утечка ресурсов.

C этим согласен. Забыл написать :)
К этому потоку это не критично, пока.
Основной вопрос почему пять записей когда файл то один??



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.028 c
14-1109856022
saNat
2005-03-03 16:20
2005.03.27
Помогите найти сервер для ICQ


1-1110645589
Muh
2005-03-12 19:39
2005.03.27
Как изменить цвет шрифта в StrinGrid?


1-1110739667
capkoh
2005-03-13 21:47
2005.03.27
Класс и Объект


9-1104846353
Trof
2005-01-04 16:45
2005.03.27
glscene


1-1110952959
Mishenka
2005-03-16 09:02
2005.03.27
Как в DatetimePicker е вводить время с долями секунд?