|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|||||||||||
Потоки, TThread, нет синхронизации06.12.2012, 17:38. Показов 1836. Ответов 18
Доброго дня, товарищи программисты.
Проблемка тут у меня с потоком. Я создаю поток, делаю там делишки хорошие, потом нажимаю на кнопицу "Стоп" и жду ... : Код C++
Программка подвисает при нажатии Button2. Полный текст класса потока:
переменная run - объявлена в классе Form1, а меняется в потоке, поэтому я в цикле жду, когда поток её поменяет, чтобы можно было окончить "Стоп". Проблема в подвисании программы в функции Button2Click. Как правильно организовать взаимодействие, не подскажите, чтобы не подвисала и всё работало?
0
|
|||||||||||
| 06.12.2012, 17:38 | |
|
Ответы с готовыми решениями:
18
Потоки(TThread) Алгоритмы синхронизации TThread и VCL паралельные потоки команд(класс TThread) |
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
| 06.12.2012, 19:07 | |
|
Могу ошибаться, но Sleep усыпляет все и потки тоже.
А вы хотите убить поток или приостановить его?
0
|
|
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
| 06.12.2012, 19:17 [ТС] | ||||||
0
|
||||||
|
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
|
|
| 06.12.2012, 19:37 | |
|
Sleep() приостанавливает выполнение текущего потока, а не всех.
0
|
|
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
| 06.12.2012, 21:32 [ТС] | ||||||
|
Решение нашёл, используя критическую секцию. Думаю, кому-то будет полезно:
0
|
||||||
|
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
|
|
| 07.12.2012, 03:50 | |
|
В первом варианте были тормоза скорее всего т.к. вы использовали Synchronize, т.е. Synchronize ждал спящий основной поток.
В последнем варианте: 1. Плохо что поток использует внешнюю переменную Form1->run, по идее все переменные нужные для работы класса должны быть в нем самом. 2. Вариант с критическими секциями не пройдет когда нужно запускать несколько таких потоков, но наверно это не ваш случай. Помнится когда я делал подобное я еще использовал WaitForSingleObject и ResetEvent
0
|
|
|
|
||||||
| 07.12.2012, 04:11 | ||||||
Обращаться к переменной сразу из двух потоков опасно. Лучше использовать объект vcl TCriticalSection пример есть в справке среды...
0
|
||||||
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||||||||||||
| 07.12.2012, 16:37 [ТС] | ||||||||||||||||
|
Привет! С учётом замечаний и предложений коллег по цеху C++, выкладываю пару классов, где ранее описанная задачка решена более корректно:
Интерфейс к потоку
Класс потока с хидером:
Класс потока полностью независимый, можно использовать его с интерфейсом IInterfaceToTMyThread. Функция WorkEnd ждёт и сигнализирует об окончании рабочей операции.
0
|
||||||||||||||||
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|
| 07.12.2012, 17:31 [ТС] | |
|
Да нет в баркадере справки, а онлайн кривая совсем. Есть нормальная справка, где можно качнуть?
Добавлено через 2 минуты Avazart, предлагаешь обрамить цикл потока блоком try?
0
|
|
|
|
||
| 07.12.2012, 17:36 | ||
|
Если будет исключение, то твоя крит.секция останется на веке заЛочена...
Добавлено через 1 минуту
0
|
||
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
| 07.12.2012, 17:37 [ТС] | ||||||
0
|
||||||
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
| 07.12.2012, 17:42 [ТС] | ||||||
|
В ErrorProcessing() надо бы пихнуть всю доступную инфу об ошибке. Наверное, типа так:
0
|
||||||
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
||||||
| 07.12.2012, 17:58 [ТС] | ||||||
Avazart, книги для умников, и не факт, что решения, которые там приводятся лучше тех, что придумываем мы сами. Добавлено через 1 минуту На то она и голова, чтобы думать. Добавлено через 6 минут Avazart, лихой класс получился с вашей помощью. Ещё чуток подшаманить и будет совсем хорошо.
0
|
||||||
|
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
|
|||||||||||
| 07.12.2012, 23:07 [ТС] | |||||||||||
|
Avazart, Тут я бы послал кого-то куда подальше или ещё дальше, но не сделаю этого, так как, возможно, придётся ещё раз что-то спросить. Но я постараюсь больше не спрашивать по возможности и обходиться своими силами. ) А впереди окончательное описание класса, разработанного мной и Avazart.
Добавлено через 1 минуту Avazart, Поберегу Вашу голову от глупых вопросов. Добавлено через 2 минуты Avazart, На счёт книг, остаюсь при своём мнении. В первую очередь нужно думать самому, потом уже пользоваться готовыми решениями. За исключением классики языка, естественно (Шилдт, Страуструпп). Добавлено через 4 часа 40 минут Ну и окончательное пока решение для класса потока. Интерфейс
0
|
|||||||||||
|
|
||||||
| 08.12.2012, 00:58 | ||||||
|
Еще десятка другого try/catчев не хватает
, а то можно было на этом велосипеде к индусам ездить...![]()
0
|
||||||
| 08.12.2012, 00:58 | |
|
Помогаю со студенческими работами здесь
19
Потоки и нарушение синхронизации Потоки и объект синхронизации семафор Нет синхронизации Проводника и рабочего стола
Windows Server 2003: Dropbox, при попытке подключения к интернету для синхронизации пишет, что нет соединенияи Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
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
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|