|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.09.2017, 17:51 | #1 |
Новичок
Джуниор
Регистрация: 07.09.2017
Сообщений: 5
|
Потоки и их синхронизация
Здравствуйте, помогите разобраться с потоками.
Есть MID приложение, которое работает с удаленной базой Firebird. У меня проблемы с синхронизацией с динамически создаваемой формой. На главной форме по нажатии на кнопку button1 : Код:
Код:
procedure TFmUsers.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; Подскажите как правильно проверять в Synchronize существование обновляемого объекта, чтобы избежать Exception. P.S. Я привел сокращенный пример потока с 2 –мя процедурами Synchronize для лучшего понимаю, у меня в потоке синхронизаций 10-12 и больше… |
07.09.2017, 18:43 | #2 |
Старожил
Регистрация: 16.05.2012
Сообщений: 3,211
|
Если на каждую динамическую форму создаётся свой поток по нажатию на button1, то можно в Button1.OnClick запоминать поток, а в OnClose формы делать ему terminate.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
|
07.09.2017, 18:52 | #3 |
Новичок
Джуниор
Регистрация: 07.09.2017
Сообщений: 5
|
|
07.09.2017, 18:55 | #4 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
и для чего тут TCriticalSection если один ходок в нее ходит?
подозреваю что ходоков много, но ты для каждого свой TCriticalSection лепишь... кроме того потенциальный дедлок - Synchronize тоже синхронизатор и если внутри Synchronize (работа в основном потоке) еще раз сделать enter в ту же критическую секцию - зависнет нахрен т.к. уже войдено в другом потоке глобальной? забудь это слово... делай в поле создаваемой формы хоть в varом public Код:
Не стесняемся, плюсуем!
Последний раз редактировалось Slym; 07.09.2017 в 19:01. |
07.09.2017, 18:56 | #5 |
Новичок
Джуниор
Регистрация: 07.09.2017
Сообщений: 5
|
|
07.09.2017, 21:10 | #6 | ||
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Цитата:
Цитата:
У меня такие вопросы: 1. Зачем Synchronize(DisCtr) и Synchronize(EnCtr) делать в критической секции? И процедуры DisCtr и EnCtr - это методы какого класса? Откуда они понимают, на какой форме нужно отключать контролы? Откуда они берут адрес FmUsers? 2. Почему нельзя сделать один Enter+Synchronize(InitForm)+Leave и в этом InitForm сделать всё, что нужно? Каждый Synchronize порождает дополнительные задержки. А основную проблему можно решить вот так: Код:
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
Последний раз редактировалось 7in; 07.09.2017 в 21:30. |
||
07.09.2017, 21:16 | #7 | |
Новичок
Джуниор
Регистрация: 07.09.2017
Сообщений: 5
|
Цитата:
|
|
07.09.2017, 21:25 | #8 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Кон писал "на лету", без проверки.... немного поменял, посмотри заново
Без WannaClose. Всё равно форма подвиснет, пока идёт соединение с базой... А если контролы отключаются на основной форме (а не на создаваемой форме), тогда дополнительный поток вообще не нужен. Это всё делается ради того, что если юзер нажал на кнопку 5 раз подряд, то ему должно открыться 5 окон, а не одно (пока идёт инициализация и только после этого можно нажать ещё раз на кнопку, чтобы она сработала)...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
07.09.2017, 21:26 | #9 | |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Цитата:
Скажи как надо, от этого и будем плясать...
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
|
07.09.2017, 21:28 | #10 | |
Новичок
Джуниор
Регистрация: 07.09.2017
Сообщений: 5
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Потоки, синхронизация | stalker1995s | Общие вопросы Delphi | 6 | 09.01.2014 17:03 |
Потоки. Закрываются все потоки при ошибке в одном. | Son | Общие вопросы Delphi | 11 | 01.11.2013 09:32 |
Потоки, синхронизация, простой | denrubun | Общие вопросы C/C++ | 11 | 29.06.2013 13:37 |
синхронизация | s.e.r.g. | C++ Builder | 10 | 11.02.2013 22:33 |
синхронизация | perun47 | Microsoft Office Excel | 0 | 31.01.2012 22:35 |