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

Вниз

Завершение потока   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
15-1193743088
KilkennyCat
2007-10-30 14:18
2007.12.02
Требуется помощь опытного спеца по FreeBSD и подобным.


5-1163941996
QuerySkin
2006-11-19 16:13
2007.12.02
Какие скины выбрать?


15-1194249314
Галинка
2007-11-05 10:55
2007.12.02
Указатель на функцию в Си


2-1194597655
allucard
2007-11-09 11:40
2007.12.02
Работа с массивом через указатели


2-1194441116
..::KraN::..
2007-11-07 16:11
2007.12.02
Как перевести компьютер в спящий режим