Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Вниз

Thread ы и FindFiles   Найти похожие ветки 

 
BOBAH   (2003-05-05 18:45) [0]

Имеет место быть следующая проблема:
Есть поток в нем выполняются какие-то действия, пока он жив показывается модальная форма. Основное дейстиве потока не важно, но там ест цикл:
while (FindNext(F)=0)
Модальная форма убирается когда вызывается событие OnTerminate у потока.
Все работало прекрасно, пока не появился пользователь с Windwows 2000 Server и унего этот поток продолжает жить, у меня подозрение что возможны две причины такого поведения:
1. не выходит из цикла описанного выше
2. как-то по особенному работают Tread"ы в Win2000Server


 
pasha_golub   (2003-05-05 18:51) [1]

Не знаю как в вынь2000сервак, но у меня на ХР такая же хрень работала точно так же как и в 98...


 
pasha_golub   (2003-05-05 18:56) [2]

А вот и код...

TDetailsThread = class(TThread)
private
FFolderName: string;
FilesCount: longint;
FoldersCount: longint;
TotalSize: int64;
Created: string;
Attr: string;
DriveIndex: byte;
protected
procedure Execute; override;
procedure UpdateInfo;
public
procedure GetFolderSize(const APath: string);
constructor Create(const Path: string);
end;

...трям-тарарам...


procedure TDetailsThread.Execute;
var A: word;
SR: TSearchRec;
begin
FreeOnTerminate := false;
TotalSize := 0;
FilesCount := 0;
FoldersCount := 0;
FindFirst(FFolderName+"\.", faAnyFile, sr);
FindClose(SR);
if SR.Time <= -1 then Created := "" else Created := DateTimeToStr(FileDateToDateTime(SR.Time));
GetFolderSize(FFolderName);
A := FileGetAttr(FFolderName);
Attr := "";
If (A and faReadOnly) = faReadOnly then Attr := Attr+#13#10+" Только чтение";
if (A and faArchive) = faArchive then Attr := Attr+#13#10+" Архивная";
if (A and faSysFile) = faSysFile then Attr := Attr+#13#10+" Системная";
if (A and faHidden) = faHidden then Attr := Attr+#13#10+" Скрытая";
{$Warnings on}
if not Terminated then Synchronize(UpdateInfo);
end;

procedure TDetailsThread.GetFolderSize(const APath: string);
var SR: TSearchRec;
begin
if Terminated then Exit;
if FindFirst(APath+"\*.*", faAnyFile, sr) = 0 then
repeat
if ((sr.Attr and faDirectory) = faDirectory) then
begin
if (sr.Name <> ".") and (sr.Name <> "..") then
begin
GetFolderSize(APath+"\"+sr.Name);
inc(FoldersCount);
end
end
else
begin
inc(FilesCount);
TotalSize := TotalSize + sr.Size;
end;

until (FindNext(sr) <> 0) or (Terminated);
FindClose(sr);
end;



 
BOBAH   (2003-05-05 18:59) [3]

У меня XP стоит тоже все работает, на 98 и Win2000 не server тоже работает.
А win2000serv не у меня а у user"a а поставить и потестировать на win200serv нет возможности



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

Форум: "Основная";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
14-59875
UzesCCron
2003-04-28 22:51
2003.05.19
Редактор с Хайлайтином


1-59745
Fighter
2003-05-06 10:21
2003.05.19
Как обращаться к объекту по


1-59739
Anna
2003-05-06 09:05
2003.05.19
QuickReport


6-59836
sils
2003-03-23 13:42
2003.05.19
Tracert ????????


1-59708
Alexeyss
2003-05-05 08:56
2003.05.19
Расположение компонентов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский