![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему поток не возобновляется после паузы? [D6, Win2k]
Aleksandr © (2002-03-04 15:44:00)Уважаемые коллеги!
У меня в программе несколько потоков, основная задача которых - искать файлы по маске и пускать их в обработку. Execute потоков примерно такой:
while NOT Terminated do
try
EnterCriticalSection(FileSection);
if SearchFiles(InDir,AppMask) then
WorkFiles;
finally
LeaveCriticalSection(FileSection);
Sleep(FSleepInterval) // 500
end
Но вот есть одна неприятная проблема: если файлов на момент запуска потока не оказалось, то поток останавливается "навсегда". То есть на их появление уже не реагирует. В констракторе FreeOnTermnate:=false. В чем тут проблема, подскажите?
y-soft (2002-03-04 23:16:00) [1]Есть еще варианты:
1. Возможно не удается войти в критическую секцию. В этом случае поток оччччень долго не завершится :)
2.К сожалению, в Delphi исключения в дополнительных потоках обрабатываются как-то не так, как в первичном. Иногда поток при возникновении исключения просто зависает без выдачи сообщений и убивается только принудительно вызовом TerminateThread :(
Digitman (2002-03-04 15:59:00) [2]Проблема, скорей всего, в теле процедур SearchFiles() и WorkFiles()