Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Про потоки.  [new]
alvltss
Member

Откуда:
Сообщений: 11
Господа, кто может подсказать ?
Изучаю мнопоточность. Вынес в отдельный поток работу с базами ACCESS через ADO. Почему то все равно наблюдается периодическая «заморозка» главной формы.
С визуальными компонентами поток напрямую не взаимодействует.
В чем может быть проблема? В ADO ? Существуют ли какие- нибудь особые требования к описанию и использованию процедур и функций, которые используют отдельные потоки ?
29 сен 17, 13:36    [20831633]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
чччД
Guest
alvltss,

нет никаких особых требований. Пиши код как душе угодно, никаких заморозок не будет.
А если заморозки, то переписывай.
29 сен 17, 13:39    [20831646]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
alvltss
Почему то все равно наблюдается периодическая «заморозка» главной формы.

Synchronize?
29 сен 17, 14:01    [20831732]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2473
alvltss
Почему то все равно наблюдается периодическая «заморозка» главной формы


подозреваю, проблема в логике программы.
29 сен 17, 15:11    [20831969]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2677
YuRock
alvltss
Почему то все равно наблюдается периодическая «заморозка» главной формы


подозреваю, проблема в логике программы.
а ADO через VCL?
А ничего, что VCL сама по себе - не многопоточная, а зависимая от сообщений?
там ADO КОМПОНЕНТ (ВНИМАНИЕ!!!!) лежит на форме, которая принимает сообщения от одного потока, и отрабатывает в главном потоке программы.
30 сен 17, 03:05    [20833000]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2677
попробуй написать свой компонент для ADO, который обойдёт потоки.
А лучше - свою либу для конкретной БД
30 сен 17, 03:06    [20833001]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2677
...если надо изучать многопоточность, то из этой преременной надо VCL исключить.
Все модули с протоками свои - НЕ ДОЛЖНЫ юзать что-то, наследуемое от TComponent
TList, TStrings - легко (второе - не советую, ну да пофиг)
но компоненты - нет. Они завязаны на окна, а они в многопотоке нормально пахать не будут.
30 сен 17, 03:32    [20833006]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2677
Makar4ik
...если надо изучать многопоточность, то из этой преременной надо VCL исключить.
Все модули с протоками свои - НЕ ДОЛЖНЫ юзать что-то, наследуемое от TComponent
TList, TStrings - легко (второе - не советую, ну да пофиг)
но компоненты - нет. Они завязаны на окна, а они в многопотоке нормально пахать не будут.

Короче, дельфя управляет ОДНИМ своим потоком.
Application.ProcessMessages - это пример обращения к нему.

Мы в дельфе по умолчанию работаем в одном потоке.
Который VCL.

...как сделать иначе:
как попроще:
1. Через TThread что-то посчитать, выдать наружу через synhronize
...как получше:
2. Свой TMyThread нарисовать, не наследуя, от TThread, там считать, выдавать наружу либо через синхронизацию, либо через глобальные переменные (через critical section)
После 5-й дельфи TThread уж очень тяжёл в синхронизации, поэтому у его своего облегчённого аналога TMyThread, который тупо PostMessage фигачит, есть все бонусы по производительности.
30 сен 17, 03:53    [20833007]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2677
SendMessage, не Post.
Ошибся
30 сен 17, 03:59    [20833008]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
Makar4ik
...если надо изучать многопоточность, то из этой преременной надо VCL исключить.
Все модули с протоками свои - НЕ ДОЛЖНЫ юзать что-то, наследуемое от TComponent
TList, TStrings - легко (второе - не советую, ну да пофиг)
но компоненты - нет. Они завязаны на окна, а они в многопотоке нормально пахать не будут.

Ой, всё...

Даже не буду спрашивать источник этого бреда.
30 сен 17, 07:39    [20833037]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2473
Makar4ik
там ADO КОМПОНЕНТ (ВНИМАНИЕ!!!!) лежит на форме

Ты сделал такой вывод из

alvltss
С визуальными компонентами поток напрямую не взаимодействует.

? Глубокомысленно...
30 сен 17, 11:03    [20833146]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2473
wadman
Ой, всё...
Не любишь из переменной VCL исключать?))
30 сен 17, 11:05    [20833149]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2473
Makar4ik
Свой TMyThread нарисовать, не наследуя, от TThread, там считать, выдавать наружу либо через синхронизацию, либо через глобальные переменные (через critical section)
После 5-й дельфи TThread уж очень тяжёл

Вот это - самая круть. Настроение с утра поднято.
30 сен 17, 11:08    [20833151]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
tip78
Member

Откуда: Москва
Сообщений: 474
"Компьютер это конечный автомат. Треды для тех людей, которые не умеют программировать конечные автоматы." (Алан Кокс)
30 сен 17, 12:21    [20833235]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
чччД
Guest
А мне вот это место больше всего нравится:
Makar4ik
...
Короче, дельфя управляет ОДНИМ своим потоком.
Application.ProcessMessages - это пример обращения к нему.

Мы в дельфе по умолчанию работаем в одном потоке.
Который VCL.
...

...
...а хорошо, если бы наши супероптимизаторы начали писать многонитевые приложения.
30 сен 17, 20:43    [20833758]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
alvltss
Member

Откуда:
Сообщений: 11
1. Поток более - менее нормально вынесен. Во всяком случае, если в него вставить тупой бесконечный цикл, то форма не замораживается.
2. На другом компе заморозки практически не замечаются. Сильно заметно было на ноуте.
3. Заморозка почему-то сильно наблюдается при выполнении WNetAddConnection2.
1 окт 17, 08:43    [20834112]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
alvltss
Member

Откуда:
Сообщений: 11
На ноуте может тормозить заметнее, поскольку запросы идут к удаленной базе через точку доступа на телефоне через сотового оператора. Надо будет уточнить это момент.
1 окт 17, 10:09    [20834152]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2473
alvltss
На другом компе заморозки практически не замечаются. Сильно заметно было на ноуте
Понятно, ноут же холоднее - там процессор специальный. Зимний.

Пока код не покажешь, даже не смешно уже что-то обсуждать.
1 окт 17, 11:08    [20834215]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
schi
Member

Откуда: Москва
Сообщений: 2357
Makar4ik
...если надо изучать многопоточность, то из этой преременной надо VCL исключить.
Все модули с протоками свои - НЕ ДОЛЖНЫ юзать что-то, наследуемое от TComponent
TList, TStrings - легко (второе - не советую, ну да пофиг)
но компоненты - нет. Они завязаны на окна, а они в многопотоке нормально пахать не будут.


Это почему же компоненты завязаны на окна ? Это почему же окна не будут работать в многопоточном приложении ?
1 окт 17, 12:02    [20834274]     Ответить | Цитировать Сообщить модератору
 Re: Про потоки.  [new]
Док
Member

Откуда: Казань
Сообщений: 5233
alvltss,

здесь читал?
2 окт 17, 10:31    [20835589]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить