![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
Столкнулся с тем что не могу понять как работает WaitForMultipleObjects. А может дело и не в нем.
Есть такой пример, большая часть кода позаимствована здесь
Так вот процедура btn2Click отрабатывает как и предполагается, а вот btn1Click выдает ошибку "Неверный дескриптор". 1) Почему не получается обработать массив хэндлов произвольного размера, т.е. фактически произвольно задавать число создаваемых потоков? 2) Если после нажатия на btn2, пока не успели завершится все потоки, нажать на btn1, то выводимое значение А будет 50, т.е. отрабатывают только 50 потоков. Т.е. получается, что массивы Handles хоть и объявляются в каждой процедуре локально, но взаимосвязаны? Почему так? Пробовал переименовывать эти массивы, результат тот же. Чувствую что истина где-то рядом... Помогите пожалуйста. |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Чему, по-вашему, равно @Handles для динамического массива?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
Если хочешь использовать функции WaitFor..., то FreeOnTerminate := False. Только не забывай для своих классов-потоков выполнять Free;
-------------------- |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Кста, ссылка в тему (у вас WaitFor = использование, завершение потока = закрытие). (Демо, это не вам, а автору вопроса) -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
CodeMonkey, спасибо за ссылки!
С хэндлами, точнее с динамическим массивом разобрался. А вот с WaitFor это уже на свежую голову... Только почему же в оригинальном примере FreeOnTerminate := True Ладно, это уже завтра. |
|||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
Так вот, возвращаясь к напечатанному. По поводу WaitFor...
FreeOnTerminate := False надо ставить, чтобы просто наверняка исключить ситуацию, когда поток завершится раньше вызова WaitFor... или с какой-то иной целью? |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 30 Всего: 50 |
С FreeOnTerminate=True ситуация следующая: При завершении поточной поточной функции в основном потоке немедленно происходит освобождение TThread. Причём происходит оно раньше, чем начинает выполняться WaitFor. Поэтому при ожидании завершения выполнения поточной функции нужно обязательно ставить FreeOnTerminate=False. -------------------- |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
| Dom |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 7.8.2005 Репутация: 1 Всего: 4 |
Спасибо всем за помощь!
Собрал еще одну тестовую программку. Работает как и задумывалось, что не может не радовать. Можно сказать основы усвоил. Теперь дело за малым - переписать старую прогу под многопоточность. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |