powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / имитация, а может и нет, многопоточность
13 сообщений из 13, страница 1 из 1
имитация, а может и нет, многопоточность
    #39888202
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще раз здравствуйте.
Есть один вопрос, который не дает покоя)) Много прочитал в сети мнений про организацию многопоточности в VBA.
Понятно, что как такового объекта как поток в VBA Access /Excel нет. И ограничение распространяется с уровня Project/Application.

Но логично ведь предположить, что если у меня к примеру на рабочем столе открыто две разные базы, и в каждой из них на таймер формы к примеру что то выполняется, то это уже не один поток. Или необязательно на таймер.

Если использовать что то типа такой конструкции:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
Dim MSA As Access.Application
Set MSA = New Access.Application
MSA .OpenCurrentDatabase Application.CurrentProject.FullName

With MSA 
' обращение к методу /полю/какое либо вычисление
end With
....



И так к примеру объявить несколько таких экземпляров и запустить внутри них вычисление чего либо.
Будут ли они выполнятся параллельно и асинхронно в нормальном понимании этого слова?
Как вы думаете?
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39888451
Сергей Лалов, если вызывать копию БД с командной строки с указанием стартового макроса, запускающего нужные действия, то это действительно будет параллельный процесс.
Кроме того, асинхронно выполняются процессы в вычисляемых полях, в том числе и самописные функции.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39888749
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий
Сергей Лалов, если вызывать копию БД с командной строки с указанием стартового макроса, запускающего нужные действия, то это действительно будет параллельный процесс.
Кроме того, асинхронно выполняются процессы в вычисляемых полях, в том числе и самописные функции.


Круто!

А запуск из батника, или вы имеете в виду shell vba?
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39888827
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

Ну, и по хорошему, прятать значек с панели задач(лента внизу виндовс)
И учесть, что приоритет неактивного процесса значительно ниже активного.
То, что будет выполняться в активном процессе 10сек может запросто выполняться в неактивном и 30сек.
Мысль, думаю, ясна, цифры от балды.
После этого встает вопрос, а нужно ли обработанные данные из обоих "потоков" как то синхронизировать.
Вопрос закрытия скрытого приложения. И т.д.
Работа с потоками, это не просто запустил процесс.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39888856
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан
Сергей Лалов,

Ну, и по хорошему, прятать значек с панели задач(лента внизу виндовс)
И учесть, что приоритет неактивного процесса значительно ниже активного.
То, что будет выполняться в активном процессе 10сек может запросто выполняться в неактивном и 30сек.
Мысль, думаю, ясна, цифры от балды.
После этого встает вопрос, а нужно ли обработанные данные из обоих "потоков" как то синхронизировать.
Вопрос закрытия скрытого приложения. И т.д.
Работа с потоками, это не просто запустил процесс.


Да, я понимаю, я уже столкнулся с медленным откликом работы такого скрытого приложения. Раскрывается функционал его только в том случае, если в приложении/"потоке" номер 2 выполняется какая либо автономная программа, которая по минимуму пересекается с потоком №1, то есть с первым приложением. Но с аксессом попроще, чем с Excel. В аксессе есть точка пересечения всех клиентских экземпляров баз, Это таблицы. (Имею в виду линки на какую то общую таблицу из первой и второй базы.)

К примеру при открытии базы №2 запускается Autoexec в котором запускается цикл и тайминг назначенных сервисных процедур ,которые проверяют значения в таблицах, соединение с сервером, смотрят не прервалось ли соединение, проверяют ,какие строки добавились, какие удалились,итд итп.И все это происходит в режиме реального времени. То есть вся черновая работа.

И пересекается это все по минимуму, на уровне значений одной дополнительной таблицы, где хранятся переменные, доступные как из базы №1 и базы №2.
Вопрос закрытия решается достаточно просто, в общей таблице значение поля к примеру становится равно 0, вторая база снимает это значение и запускается код на закрытие.

С передачей большого количества информации пока экспериментирую, хочу попробовать распараллелить цикл от 1 до 50 000 000 и как то попытаться выполнить половину в одной БД, половину в другой. И чтобы результат собрался в первой.) Зашел к решению проблемы как раз через общие таблицы.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39888861
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

ищите здесь Бенедикта. Он поможет!
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39889954
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
С передачей большого количества информации пока экспериментирую, хочу попробовать распараллелить цикл от 1 до 50 000 000 и как то попытаться выполнить половину в одной БД, половину в другой. И чтобы результат собрался в первой.) Зашел к решению проблемы как раз через общие таблицы.


Самый устойчивый вариант - делать бригадира... то есть именно главное приложение определяет всю задачу в целом и этапы её выполнения. Другие (вспомогательные) приложения или равнозначны между собой или специфичны по назначению. Бригадир ставит задачи (расставляя в таблицах признаки работ и входные массивы) и собирает результаты и выходные массивы и так в цикле. Все запускается одновременно и работает на опросах состояний по таймерам. Бригадир рулит и управляет, помощники выполняют поставленные задачи...
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39889958
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,
Как то так и представляю возможности реализации. Уже даже запилил одну ведущую и две ведомых приложения. ) Жалко объекты vba через таблицы перебрасывать нельзя, типа Collection, или array. В общем гонять циклы по условию и что то считать можно. Визуально скорость подрасла. Логику обработки и распараллеливания приходиться писать для каждой операции. В принципе если заморочиться , можно что то и посерьезней сделать, полезней для общества.

Бенедикт уже давно не появлялся тут, года 4, периодически почитывал его некоторые реализации кода, и понимал ,что так чисто и грамотно реализовать решения я вряд ли смогу вообще когда либо. Потерял интерес наверное к vba. Или ушел в программирование в стиле трёх кнопок 0,1, run
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39890019
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов,

Если все это ради спортивного интереса
Для объектов можно создать таблцы со структурой объекта
сложность растет, зато будет похоже на RMI.
Я бы классы создавал для объектов и у бригадира и у подчиненных (должны быть эдентичны)
и передачу объекта делал бы или через таблицы или другой формат, что ближе.
Но, сложность растет в геометрической прогрессии.
Забивание гвоздя отверткой

Если вам действительно необходимо решить подобного рода задачу
я бы делал это как минимум в дельфях, там есть многопоточность (простите за отсыл)
если у вас голова не ломается от понятий класс-объект
и среда более менее похожа.
Другие языки буду посложнее.

С уважением. И надеюсь, без обид.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39890047
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан
Сергей Лалов,

Если все это ради спортивного интереса
Для объектов можно создать таблцы со структурой объекта
сложность растет, зато будет похоже на RMI.
Я бы классы создавал для объектов и у бригадира и у подчиненных (должны быть эдентичны)
и передачу объекта делал бы или через таблицы или другой формат, что ближе.
Но, сложность растет в геометрической прогрессии.
Забивание гвоздя отверткой

Если вам действительно необходимо решить подобного рода задачу
я бы делал это как минимум в дельфях, там есть многопоточность (простите за отсыл)
если у вас голова не ломается от понятий класс-объект
и среда более менее похожа.
Другие языки буду посложнее.

С уважением. И надеюсь, без обид.


Нет, какие обиды, голова от понятий класс объект не ломается) Кроме VBA , ковыряю php,MySQL, JS. Весной курсы прошел основательные по Java (Там с потоками все прозрачней, наделал Thread1,Thread2,Thread3 и полетел)). Курсы интенсивные, с постоянными дополнительными заданиями, там то и удалось проломать корку - отойти где можно от функционального программирования и использовать объектный подход. Дельфи к сожалению все больше и больше уходит в небытие. Если в 2003 это был прорыв, помню как все поголовно бросались учить дельфи,сейчас о нем практически ничего не слышно, кроме как на форумах собственно по Дельфи. У меня один из друзей реализовал крутой интерфейс и серверную часть на MS SQL ,для питерского порта (какого то его отпочкования). Так он говорит ,что как кроме поддержания функционала, который он сделал еще году в 2005-2006м работы больше нет. Что вы сами думаете о перспективах в Дельфи? Нет желания на Cишарп перепрыгнуть или на плюса?

Гонять классы через таблицы классы можно думаю, но так, как текстовую переменную. К примеру имя класса передавать в текстовом формате в поле таблицы, а в другом клиентском приложении подхватывать это имя ,передавать как переменную в текущий код , при наличии одинаковых классов у бригадира и его подчиненных соответственно можно инициализировать эту текстовую переменную, как NEW ИмяКлассаПеременной.

Чтобы из чисто академического интереса посмотреть что получилось в плане многопоточности в VBA, я сделаю простой пример и выложу его сюда, может кому то и будет интересно.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39890138
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое мнение: VBA в принципе плох для многопоточных вычислений, в нем просто нет базовых конструкций для асинхронной работы, даже коллбэков нормальных нет, только через события как-то можно это эмулировать. Посему лучшим решением считаю вынесение асинхронных модулей в библиотеки, написанные на том же сишарпе. Общение с основным процессом проще всего через таблицы, хотя можно попробовать и через API, но как это сделать - пока не представляю из-за отсуствия коллбэков.

В общем, это извращения и при такой необходимости я бы полностью перешел на приспособленный для этого язык. Я сейчас больше с JS для бэкэнда сайтов работаю, там, конечно, все заточено под асинхронность, даже практически все циклы обработки массивов/объектов асинхронны. После многих лет работы с обычными процедурными языками переход был болезненным, ибо пришлось поменять мышление.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39890205
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Весной курсы прошел основательные по Java


Вот вот.
Я просто постеснялся написать про чисто объектные языки.
А делфи написал, как наиболее близкий, как мне кажется, к Access.
И просто забудете проблему многопоточности.
Там, правда, тоже есть несколько вариантов.
RxJava, Vertix - почитайте про библиотеки, Stream API, на худой конец.
Сначала голову сломает, но после, почти все можно будет решать несколькими строками.
Да и перпективы развития, сами понимаете.
Сергей Лалов
можно инициализировать эту текстовую переменную, как NEW ИмяКлассаПеременной

Думаю, так не получится.
Иначе можно было бы поднимать экземпляр формы через ее имя, используя переменные.
Хотя я, может, и не дожал это.
Имена классов приходится жестко прописывать.
...
Рейтинг: 0 / 0
имитация, а может и нет, многопоточность
    #39890216
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игортан

RxJava, Vertix - почитайте про библиотеки, Stream API, на худой конец.
Сначала голову сломает, но после, почти все можно будет решать несколькими строками.
Да и перпективы развития, сами понимаете.


Да, RxJava почитал уже, как раз пытаюсь окончить свое первое приложение закончить на Андроид Java.
Честно говоря подходил пару раз и просто не вкурил,честно)) Пока пишу сам нужные классы, дергаю библиотечки простые, но
Vertex и Rx пока не заходит ,просто боль))
Зато дружелюбной и понятной оказалась библиотека ретрофит, которая позволяет маппинг данных с веб сервера очень быстро делать.
Очень быстро закручивает строки из JSON в объект и не надо много расписывать в коде .

Я по старинке (как в аксессе) в андроид сначала организовал доступ к серверу MySQL через ODBC driver, за что был бит в соседней ветке и закидан тапками
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / имитация, а может и нет, многопоточность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]