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

Вниз

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

 
авыф   (2007-06-07 12:27) [0]

создаю свой поток TThread, создаю его в отдельном юните, потом из главного модуля делаю его Terminate, так вот как мне узнать что поток завершился из главного модуля? прочитал в справке что есть функция Terminated, но она protected, т.е. недоступна где-либо кроме потока, пробовал так:
If Th<>nil then ... , но он не nil, хотя я его вроде уничтожил, не подскажете как мне отловить что поток уничтожен?


 
Рамиль ©   (2007-06-07 12:33) [1]

TThread.OnTerminate


> прочитал в справке что есть функция Terminated

Неправильно прочитал. Terminated не означет, что поток завершился.


 
авыф   (2007-06-07 12:40) [2]


> Неправильно прочитал. Terminated не означет, что поток завершился.

ну она показывает уничтожен поток или нет...

> TThread.OnTerminate

ну она вызывается только когда только что поток завершился, а вот как например узнать через 10 секунд что поток был завершен? handle тоже у потока остается, я думал что при Terminate, полностью высвобождаются ресурсы...
по-крайне мере когда используешь THandle и CreateThread, там когда вызываешь Terminate  то Th=nil...
хотелось бы с TThread тоже так проделать, или это нереально?


 
clickmaker ©   (2007-06-07 12:40) [3]


> как мне отловить что поток уничтожен?

в какой момент?
есть GetExitCodeThread(), TThread.WaitFor


 
Сергей М. ©   (2007-06-07 12:48) [4]


> поток завершился


и


> поток уничтожен


- это две разные вещи. Вторая подразумевает первую, но не наоборот.
> как мне узнать что поток завершился


см. метод WaitFor.


> как мне отловить что поток уничтожен?


При условии FreeOnTerminate:

1. Создать поток в suspended-состоянии.
2. Получить дубликат его хэндла (DuplicateHandle).
3. Вызовами любой из WinAPI-функций ожидания ([Msg]WaitForXXXXX) дождаться сигнала завершения потока.
4. Закрыть хэндл-дубликат (CloseHandle)


 
Сергей М. ©   (2007-06-07 12:51) [5]

Уточнение:

1. Создать поток в suspended-состоянии.
2. Получить дубликат его хэндла (DuplicateHandle), при необходимости перевести поток в состояние resumed.
3. Вызовами любой из WinAPI-функций ожидания ([Msg]WaitForXXXXX) дождаться сигнала завершения потока, убедившись перед этим, что поток находится в состоянии resumed (при состоянии suspended перевести его в состояние resumed)
4. Закрыть хэндл-дубликат (CloseHandle)


 
SpellCaster   (2007-06-07 15:05) [6]

Зачем так усложнять, если можно перед выходом из Execute прописать присвоение какой-либо булевской переменной... да хотя бы в члены класса ее запихнуть. А потом проверять из любого места

if MyThread.FinishedExecutin then ...


 
Сергей М. ©   (2007-06-07 15:30) [7]


> SpellCaster   (07.06.07 15:05) [6]


Дурнее решения, чем чтение переменной в цикле, придумать сложно)


 
Сергей М. ©   (2007-06-07 15:35) [8]


> SpellCaster   (07.06.07 15:05) [6]


[7] - это раз.

Факт установки флага FinishedExecutin не есть факт завершения интересующего потока, тем более не есть факт его уничтожения - это два.



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

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

Наверх




Память: 0.46 MB
Время: 0.004 c
3-1175757826
derm
2007-04-05 11:23
2007.07.01
ADO кодировка


2-1181202588
Gr
2007-06-07 11:49
2007.07.01
Работа с таблицей без БД


2-1181218305
>>DEATH<<
2007-06-07 16:11
2007.07.01
вытаскивание переменных из xml


2-1181057867
AAN
2007-06-05 19:37
2007.07.01
Проблема удаления объектов


2-1181163049
Leon25
2007-06-07 00:50
2007.07.01
Проблема с InterBase 7.5





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский