|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.06.2015, 18:39 | #1 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Определить что поток завершен и повторно запустить его
Суть вот в чем при уничтожении потока указатель не устанавливается в nil
соответственно проверка отработал ли поток if not assigned(MyThread) then будет не правильной подскажите правильно ли я попытался сделать установку указателя в nil Модуль потока Код:
Код главного потока Создаю обработчик события OnTerminate Код:
Код:
Код:
|
07.06.2015, 21:13 | #2 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
Так лучше не делать. Правильней устанавливать в nil указатель на поток в обработчике LicenseThreadTerminated.
|
07.06.2015, 21:22 | #3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А для чего нужно тебе проверять поток, если не секрет?
I'm learning to live...
|
07.06.2015, 21:49 | #4 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Именно так я и хотел изначально сделать, но предположим я иногда хочу отключать событие
Код:
и всё же данный способ имеет место быть? или приведет к AV или еще каким либо нежелательным ситуациям.? данный поток контролирует работу других потоков проверки лицензии и если какой то из потоков вдруг подох при ошибке или же его убили намеренно, то данный поток его перезапускает Код:
Последний раз редактировалось Stilet; 07.06.2015 в 22:22. |
07.06.2015, 23:48 | #5 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
Отключать событие надо битовым флагом, и не удалением обработчика. В обработчике этот битовый флаг проверять. Обработчики -- это архитектура приложения, флаги -- настройки, конфигурация. Одно дело -- менять архитектуру, другое -- менять настройки.
|
08.06.2015, 02:27 | #6 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Мне кажется в моем случае лучше всё таки отключить событие, код красивее, и удобнее
При завершении потока выполнется OnTerminate в котором происходит Код:
Соответственно для корректного намеренного выхода из программы необходимо сначала остановить поток, так как поток зациклен Код:
Но тут сработает событие OnTerminate (если его не отключить) и покажет сообщение после здохнет хотя я корректно пытаюсь завершить поток без выполнения OnTerminate Вот что я сделал в поток добавил свойство Код:
Код:
|
08.06.2015, 02:28 | #7 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Вот весь модуль потока
Код:
|
08.06.2015, 02:39 | #8 |
Пользователь
Регистрация: 20.03.2009
Сообщений: 99
|
Всё же можно ли обнулить указатель в Destroy потока?
ведь событие Destroy выполняется в любом случае, при уничтожении потока |
08.06.2015, 06:32 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Не очень ИМХО идея правильная. Мне думается что тебе нужно пересмотреть механизм проверки полностью. И ничего нигде не обнулять из себя.
I'm learning to live...
|
|
08.06.2015, 14:50 | #10 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,774
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как запустить поток второй раз | Dеlphi | Общие вопросы Delphi | 11 | 04.03.2015 16:45 |
Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10 | ---Demon--- | Общие вопросы C/C++ | 1 | 27.10.2014 07:34 |
Поток выполняется или прерван - нельзя запустить повторно | boris-blade | Общие вопросы .NET | 0 | 02.04.2010 18:16 |
Что такое мемтест и как его запустить? | Ромио | Операционные системы общие вопросы | 3 | 14.08.2009 08:54 |
Как сделать, чтобы программа запускалась один раз, т.е. повторно запустить нельзя??? | Kamikadze_666 | Безопасность, Шифрование | 7 | 31.07.2007 08:34 |