powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять вопрос по тредам...
7 сообщений из 7, страница 1 из 1
Опять вопрос по тредам...
    #32243497
AndreyBond
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу написать на собитие закрытия формы такую вот штуку:
if <проверка: работает ли мой тред> then Action:=caNone;

Как узнать, работает тред или нет??

При создании треда у меня свойство FreeOnTerminate:=true;
...
Рейтинг: 0 / 0
Опять вопрос по тредам...
    #32243888
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то каждый тред должен иметь свой Handle. Если создавать его средствами API, то он возвращается как результат создающей функции CreateThread. В Delphi, видимо как и во всех остальных случаях, это что-то типа Thread.Handle

Пюс, в API есть функция, позволяющая узнать существует ли поток с данным Handle. Правда я сейчас сходу не скажу название, нужно лезть в документацию. Ага, вот, нашёл:

GetExitCodeProcess - ... эта функция может быть использованя дял опредения того факта, что конкретный процесс всё ещё выполняется...

синтакис BOOL GetExitCodeProcess(HANDLE hProcess,LPDWORD lpdwExitCode)
правда, это C, синтаксис для Delphi нжно смотреть в файле Windows.pas, где объявлены все заголовки функций для API. Ищите по имени функции.

Если процесс ещё не завершён, то переменная lpdwExitCode будет иметь значение STILL_ACTIVE.

Подробности см. в справке по WinAPI, она поставляется в комплекте c Delphi.
...
Рейтинг: 0 / 0
Опять вопрос по тредам...
    #32243991
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мыльников

ваша функция возвращает информацию о процессе , а не о потоке
для потока будет функция GetExitCodeThread
кстате, альтернативой к этой функции можно использовать сигнальные функции... которые позволяют в том числе и дожидаться завершения потока
...
Рейтинг: 0 / 0
Опять вопрос по тредам...
    #32244848
Max P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я делаю это так:
1) Завожу указатель на объект потока, напр. Fthread, первоначально = nil.
2) Создаю поток FThread := TMyThread.Create(....), причем FreeOnTerminate=True, как у Вас
3) Определяю обработчик TMyThread.OnTerminate, в котором выставляю Fthread=nil.

Активность потока можно определить по значению Fthread, равен он nil, или нет.
...
Рейтинг: 0 / 0
Опять вопрос по тредам...
    #32245071
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно воспользоваться классом TThreadList
...
Рейтинг: 0 / 0
Опять вопрос по тредам...
    #32245270
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если WaitForSingleObject (ThreadHandle, 0) вернет WAIT_TIMEOUT, значит поток еще жив. Если WAIT_OBJECT_0, значит уже умер.
...
Рейтинг: 0 / 0
Опять вопрос по тредам...
    #32245373
Max P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно также определить у своего треда деструктор вроде того:

destructor Destroy;
begin
inherited;
{здесь выставить флаг завершения потока}
end;

надо только иметь ввиду, что Destroy будет вызван в контексте этого треда, поэтому доступ к флагу завершения должен быть синхронизирован.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Опять вопрос по тредам...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]