Форум: "Основная";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
ВнизЗавершение потока Найти похожие ветки
← →
em240 © (2007-09-12 13:52) [0]while not Terminated do
begin
repeat
if ReadDirectoryChangesW(hDir, Buf, BufSize, SubDirs, //становится и не идёт дальше
FILE_NOTIFY_CHANGE_SIZE,@Returned, nil, nil) then
begin
Synchronize(Main.Proc);
end;
until False;
FreeMem(Buf);
end;
CloseHandle(hDir);
Synchronize(Stop);
как можно завершить данный поток?
← →
tesseract © (2007-09-12 14:04) [1]
> как можно завершить данный поток?
Делай с overlapped +GetOverlappedResult + CancelIO.
← →
Сергей М. © (2007-09-12 14:04) [2]
> как можно завершить данный поток?
Не уверен, но возможно ф-ция вернет управление (с соотв. ошибкой), если закрыть хэндл hDir в контексте другого потока. Проверь сам.
Если не возвращает управление, то выход только один - использование асинхронного режима работы ф-ции (см. справку).
← →
evvcom © (2007-09-12 15:39) [3]Поток должен через Terminate корректно завершаться, если нет, ищи ошибки у себя. Я уже несколько вижу прям ща:
1. У тебя нет условия выхода из repeat
2. И если бы оно было, то у тебя внутри беконечного while (не считая Terminate) есть освобождение Buf без предварительного выделения. Что ты будешь освобождать на втором проходе? На третьем?
← →
em240 © (2007-09-12 16:47) [4]Buf выделяется в функции синхронизации :)
← →
Kolan © (2007-09-12 17:02) [5]Потоку надо послать сообщение «Закрывайся», аон должен будет прервать цикл
repeat until False;
← →
Сергей М. © (2007-09-12 17:03) [6]
> em240 © (12.09.07 16:47) [4]
>
> Buf выделяется в функции синхронизации :)
>
Ай малацца) .. Наш человек ! (С)
Сначала обратился к несуществующему буферу, и только потом его "выделил")
Так держать !
← →
evvcom © (2007-09-12 17:16) [7]Да... крута! :-)
← →
Сергей М. © (2007-09-12 17:19) [8]
> evvcom © (12.09.07 17:16) [7]
Бывает и круче)
Но Автор при это еще и хихикает, как бы демонстрируя непокобелимую уверенность в своих действиях - вот что умиляет)
← →
tesseract © (2007-09-12 17:58) [9]
> evvcom © (12.09.07 15:39) [3]
Да функция у него синхронная - пока в папку чего не запишешь она не вернёться. Да и из repeat не выйдет (можно подумать terminated мало), и ошибку во freemem получит. Хакер короче.
← →
Суслик © (2007-09-14 00:09) [10]ну и охота вам?!
копать решение можно имея только первый ответ, имхо, конечна.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c