Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c