|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|||||||||||
Разница между TThread::WaitFor и WaitForSingleObject01.12.2015, 17:31. Показов 9146. Ответов 17
Метки нет (Все метки)
Доброго времени суток!
Имеется код: Главный модуль
И модуль потока
Собственно вопрос и внимание на 46 строку кода - Если попытаться закрыть форму, пока 7 секунд еще не прошли и воспользоваться функцией WaitForSingleObject(); для ожидания завершения потока, то форма повиснит намертво и это вполне логично, потому что дополнительный поток стоит в очереди и ждет когда освободится главный поток, чтобы войти в synchonize, а главный поток тем временем занят залипанием, в ожидание завершения дополнительного потока, в общем замкнутый круг и это состояние вполне естественное. Но не могу понять, почему если WaitForSingleObject(); заменить на WaitFor() и проделать выше описанные действия, то WaitFor() уступит место дополнительному потоку и весь код в synchonize корректно выполнится и форма закроется?
0
|
|||||||||||
| 01.12.2015, 17:31 | |
|
Ответы с готовыми решениями:
17
Разница между версиями C++ Builder В чем разница между MSVC2010 и MSVC2013? |
|
|
||||||
| 01.12.2015, 17:56 | ||||||
Сообщение было отмечено SatanaXIII как решение
Решение
Нужно смотреть в исходники на делфях
1
|
||||||
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
||
| 01.12.2015, 17:58 [ТС] | ||
|
0
|
||
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|
| 01.12.2015, 18:04 [ТС] | |
|
0
|
|
|
|
|
| 01.12.2015, 18:07 | |
|
Смотрите Проверка существования потока
0
|
|
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|
| 01.12.2015, 18:13 [ТС] | |
|
0
|
|
|
|
||
| 01.12.2015, 18:16 | ||
|
Т.е. когда выполняется к примеру кнопка "стоп" можно смело утверждать о состоянии потока по указателю на вторичный поток.
1
|
||
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|||||||
| 01.12.2015, 18:29 [ТС] | |||||||
|
Каков выход? Проверка на OnTerminate != NULL тут явно не покатит.. Забыл добавить, что все это при условии, что
0
|
|||||||
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|
| 01.12.2015, 18:44 [ТС] | |
|
0
|
|
|
|
|
| 01.12.2015, 23:43 | |
|
Чего тут доходить? Я ссылку на код примера указал выше.
Но лучше конечно попросту отказаться от FreeOnTerminate=true, что бы избежать удаления потока и не парится насчет дедлоков которые могут быть при OnTerminate Добавлено через 4 часа 47 минут Кстати есть неплохая статейка Многопоточные программы в Delphi изнутри 2009г Андрей Боровский К примеру что бы избежать дедлоков можно попробовать заменить Synchronize() на Queue() (Я обычно использую TIdNotify) в вашем коде.
1
|
|
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
||||||
| 03.12.2015, 16:42 [ТС] | ||||||
|
По поводу обнуления указателя в событие OnTerminate
на 17ой строке проверяется, установили ли мы флаг FreeOnTerminate в true, если да, то произойдет попытка очистить уже раннее освобожденный регион памяти, но даже если значение этого флага будет false, потом мы даже вручную не сможем освободить память, из этого предполагается единственный вариант, это установка флага в false и очистка памяти прям в обработчике. Правильно?
0
|
||||||
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|
| 03.12.2015, 18:09 [ТС] | |
|
Тогда встречный вопрос. Возможно ли как-то переопределить OnTerminate, чтобы в него была возможность передавать указатель на указатель объекта потока, чтобы бы не плодить обработчики для каждого объекта?
0
|
|
|
16 / 16 / 10
Регистрация: 13.02.2013
Сообщений: 75
|
|||||||
| 03.12.2015, 19:24 [ТС] | |||||||
Замысел в том, чтобы обработчик был универсальным
0
|
|||||||
|
|
|
| 03.12.2015, 19:59 | |
|
0
|
|
| 03.12.2015, 19:59 | |
|
Помогаю со студенческими работами здесь
18
В чем разница между способами передачи структуры в функцию? В чем разница между классами TWinControl, TControl, TComponent? Какая разница между различными сокетами (например, между 775 и 1155)? waitfor() или чтото другое?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|