|
1 / 1 / 0
Регистрация: 17.09.2008
Сообщений: 6
|
|||||||||||
Потоки(TThread)24.09.2008, 20:39. Показов 25731. Ответов 15
Метки нет (Все метки)
Здраствуйте. У меня возникла следующая проблема, начал изучать потоки,когда создаю три потока, третий должен запуститься после окочания роботы одного из двух (наважно какой). вот тут ы проблема, Билдер выдаёт ошыбку типа неверный дискриптор. Как можно исправить ошыбку?
главный класс
0
|
|||||||||||
| 24.09.2008, 20:39 | |
|
Ответы с готовыми решениями:
15
Потоки, TThread, нет синхронизации TThread, TThread, TThread .......... %)
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 25.09.2008, 18:24 | |
|
Из потоков обращаться напрямую к форме и тем более к ее компонентам - это очень плохая идея. Я в таких случаях посылаю форме свои мессаги с нужными параметрами.
0
|
|
|
1 / 1 / 0
Регистрация: 17.09.2008
Сообщений: 6
|
|
| 25.09.2008, 19:55 [ТС] | |
|
Да, я с вами соласен, можно либо использовать Synhronize() либо посылать сообщения, но согласно задания использоваиня VCL компонент в программе - допускаеться. Мне важно как правильно в моём случае использовать ф-ю WaitFor?
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 26.09.2008, 07:23 | |
|
WaitFor() ждет пока поток не совсем не завершится. Если она никак не может дождаться, то это значит, что второй поток не завершается. Можно код второго потока?
0
|
|
|
1 / 1 / 0
Регистрация: 17.09.2008
Сообщений: 6
|
||||||
| 26.09.2008, 15:02 [ТС] | ||||||
|
код второго потока:
0
|
||||||
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 26.09.2008, 16:14 | |
|
А может третий поток надо запускать раньше, чем второй? Может второй уже успевает сделать Free()?
0
|
|
|
1 / 1 / 0
Регистрация: 17.09.2008
Сообщений: 6
|
|
| 26.09.2008, 16:50 [ТС] | |
|
ксожалению третий должен начать роботать только после завершения второго (такое задание). И как раз для етого есть ф-я WaitFor(). Она, как мне кажеться ждёт когда закончит роботу один поток и запускает следующий.(я делал ету програму по примеру из книги Архангельского)
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|||||||||||
| 26.09.2008, 21:28 | |||||||||||
|
Нет, я имел ввиду вот это:
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 17.09.2008
Сообщений: 6
|
|
| 27.09.2008, 19:47 [ТС] | |
|
я тоже пробовал тоже так делать- все одно таже ошибка. Сейчас переделал слегка прогу тепер после окончания одного потока сразу запускаю следюший(в методе Execute). Но все одно непонимаю как запустить поток методом WaitFor? Vovan-VE может вы использовали етот метод WaitFor или маете пример с ним? Просто из-за принцыпа интересно как же с ним роботать
0
|
|
|
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
|
|
| 27.09.2008, 22:07 | |
|
Вообще с потоками почти всегда такая муть. Как ни крути-мути, все равно бывают случаи с ошибками.
0
|
|
|
|
|||
| 25.11.2009, 11:07 | |||
Добавлено через 47 минут Хотя далее написано про Synchronize. Видимо это оно и есть
0
|
|||
|
43 / 39 / 12
Регистрация: 05.01.2009
Сообщений: 394
|
||||||
| 25.11.2009, 16:15 | ||||||
|
если нужно понять как устроены классы VCL то удобно смотреть исходники на делфи!
вот например процедура Synchronize
0
|
||||||
|
|
|
| 25.11.2009, 16:52 | |
|
Про Synchronize я, если честно, толком не понял, как сие использовать
Добавлено через 55 секунд Фенрир, а у тебя есть короткий пример, как задача в потоке на форму что-то отображает. А ещё я не понял, какие есть средства синхронизации. Для потоков в линухе используются mutex'ы, а что в винде?
0
|
|
|
|
|
| 25.11.2009, 20:53 | |
|
Ещё вопрос. Создаю программу примерно по следующей схеме. Как в примерах создаю производный класс, устанавливаю в конструкторе FreeOnTerminate в true, а в конце процедуры Execute ещё и на всякий случай "delete this" написал.
В программе работает таймер с интервалом в 1 секунду. На каждую активацию таймера создаю новый процесс, который исполняется, что-то там себе считает и выходит. На всё это уходит заведомо меньше секунды. Получается так, что каждую секунду я создаю новый поток. При запуске из IDE в информационной строке мне об этом постоянно сообщается, т.е. на каждый созданный поток печатается строка, что создался новый поток (Thread Start: Thread ID: ....). И вроде бы по такой логике поток при завершении работы метода Execute должен удаляться. Однако если погонять программу несколько секунд, после чего закрыть программу, то в информационном окне IDE вылезает целая пачка сообщений (Thread Exit: Thread ID: ....). Что это означает? Что потоки реально не были удалены или это какие-то особенности запуска из-под IDE? Запускаю в Release-версии, т.е. вроде бы как без отладчика должно?
0
|
|
|
4 / 4 / 1
Регистрация: 28.11.2009
Сообщений: 6
|
|
| 06.12.2009, 18:28 | |
|
А без WaitFor совсем не обойтись?
Можно навоять обработчик собыйти Thread->OnTerminate. Присвоить его двум первым потокам. В обработчике создать проверку на то, что 3-й поток не запущен и в этом случае запустить его. Вот и всё шаманство.
0
|
|
| 06.12.2009, 18:28 | |
|
Помогаю со студенческими работами здесь
16
Несколько модулей TThread TThread и копирование файлов Tthread доступ к переменным TThread,Terminate() и Terminated Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|