Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
1

Маленькое продолжение темы "Аналог Excel-метода "OnTime"" или про многопоточность

02.09.2014, 09:48. Показов 9814. Ответов 56
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Коллеги, хочу добавить несколько слов ... (раз уж речь зашла про 2003 офис)
Комментарий: на счет глючности версий после 2003 ... извините, IMHO - эта версия наиболее нестабильная на фоне всех после нее вышедших ... жаль, что не собирал баги раньше (их стало значительно меньше. очень значительно!).
Комментарий: если хотите использовать виндовый таймер - 100 раз подумайте. Его использование сопряжено с огромным количеством НО ...

Комментарий: когда-то ... (как раз) в бытность 2003 офиса, использовал один из сторонних OCX-таймеров. Так вот, вопреки всему здавому смыслу и опыту эксперементаторов использовать многопоточность в Экселе - могу вас заверить - получалась НОРМАЛЬНОЕ "многопотоковое"(или псевдомногопотоковое) выполнение кода. Одновременно отрабатывало 2, 3 и более экземпляров вызываемой функции если она не успевала закончить свое выполнение раньше, чем вызывалась ее копия ... Пробовал провернуть такой опыт потом на других версиях - не получалось.
Объяснить? Ни коем разом. Не могу. Но это работало и факт.
(когда-то искал, какие-то ссылки и примеры в интернете были ... но все это было не работающее или работающее сильно не стабильно)

Вопрос: кто пробовал и каких добился результатов на запуск нескольких потоков в VBA? Было бы здорово ...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2014, 09:48
Ответы с готовыми решениями:

Аналог Excel-метода "OnTime"
Здравствуйте. Что можно использовать вместо Excel-метода "OnTime", чтобы запускать нужную...

Про отсебятину (продолжение оффтопа из профильной темы)
Оффтоп из этой темы. Я просто ее решу согласно условиям. Если она будет решаться только через...

Осуществить автоматизированный запрос с сайта в Excel продолжение темы
Захожу на сайт по ссылке ...

Аналог Application.OnTime в OutLook
нужен аналог функции Application.OnTime в Outlook, по аналогии Excel такое решение подходит так...

Продолжение темы PictureBox
В недавнем сообщении давалась ссылка на навороченный ScrollPictureBox. Вопрос знатокам - а можно ли...

56
Заблокирован
03.09.2014, 12:34 41
Author24 — интернет-сервис помощи студентам

Не по теме:


Цитата Сообщение от Антихакер32 Посмотреть сообщение
Ты многократно обратился...
и не надо мне (ты)-кать



Добавлено через 4 минуты
По хорошему, можно было реализовать через коллекцию,
тогда нужно в массив добавить еще и ключ в перечислении
Array(КЕУ, ClassObj, RaiseObject, ProcName)

Добавлено через 22 минуты
Переделал ! ✰

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Option Explicit
'Модуль для реализации таймеров
'© Антихакер32
Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Dim Co As Collection
 
Sub StartTimer(ClassObj As Object, RaiseObject As Object, ProcName$, Interval&)
    On Error Resume Next: If IsError(ClassObj.gTmr) Then Exit Sub
    If Co Is Nothing Then Set Co = New Collection
    EndTimer ClassObj.gTmr
    ClassObj.gTmr = SetTimer(0, 0, Interval, AddressOf TimerProg)
    Co.Add Array(ClassObj.gTmr, ClassObj, RaiseObject, ProcName), CStr(ClassObj.gTmr)
End Sub
 
Sub TimerProg(ByVal hWnd As Long, ByVal msg As Long, ByVal idEvent As Long, ByVal TimeSys As Long)
    Dim v: On Error GoTo ERRR
    For Each v In Co
        If v(1) Is Nothing Then
            EndTimer v(0)
        ElseIf idEvent = v(1).gTmr Then
            CallByName v(2), v(3), VbMethod
        End If
    Next: Exit Sub
ERRR:
    Debug.Print "errr"
End Sub
 
Sub EndTimer(ByVal VarTMR&)
    On Error Resume Next
    If VarTMR = 0 Then Exit Sub
    KillTimer 0, VarTMR: Co.Remove CStr(VarTMR)
End Sub
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
03.09.2014, 12:47 42
Цитата Сообщение от Антихакер32 Посмотреть сообщение
Где вы там увидели многократное обращение
Мы вызываем CreateObject.
CreateObject вызывает CLSIDFromProgID, чтобы получить CLSID из ProgId-а — это первое обращение к реестру, требующее регистрации.
CreateObject вызывает CoCreateInstance.
CoCreateInstance вызывает CoGetClassObject.
CoGetClassObject ищет в реестре имя dll-файле на базе CLSID-а (ключ «InprocServer32») — это второе обращение к реестру, требующее регистрации.
Также при получении списка методов загружается tlb - это 3-е обращение к реестру.
Цитата Сообщение от StepInLik Посмотреть сообщение
В ответ на мой пример по ссылке
Это был ответ не на пример, а на высказывание которое я процитировал в том посте. Debug не является объектом, поэтому ему не нужен маршаллинг вызовов.
1
Заблокирован
03.09.2014, 12:53 43
Цитата Сообщение от The trick Посмотреть сообщение
Мы вызываем CreateObject.
CreateObject вызывает CLSIDFromProgID, чтобы получить CLSID из ProgId-а — это первое обращение к реестру, требующее регистрации.
CreateObject вызывает CoCreateInstance.
CoCreateInstance вызывает CoGetClassObject.
CoGetClassObject ищет в реестре имя dll-файле на базе CLSID-а (ключ «InprocServer32») — это второе обращение к реестру, требующее регистрации.
Одним словом Жесть
ну переделал-же..
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
03.09.2014, 12:54 44
Антихакер32, ты специально игнорируешь полезные советы? В таком случае я не буду тебе разъяснять причины "кривости" твоих кодов.
Код плохой, очень ресурсоемкий и медленный.
0
Заблокирован
03.09.2014, 13:01 45
Цитата Сообщение от The trick Посмотреть сообщение
В таком случае я не буду тебе разъяснять причины "кривости" твоих кодов.
обычно вы и не разъясняете, к тому-же я не стремлюсь их от вас получать
я понимаю, ресурсы и прочее, но вы уже перегибаете
зачем мне знать куда какой байт перекинулся на машинном уровне, когда реч идет
о квантах времени, и минимальном использовании памяти
0
StepInLik
03.09.2014, 13:05  [ТС]
  #46

Не по теме:

Цитата Сообщение от The trick Посмотреть сообщение
Код плохой, очень ресурсоемкий и медленный.
Извините, не могу согласиться. Мы что, работаем в жестких условиях ограничения процессорного времени?
Насколько понимаю, коллега что-то пишет без четких "технических требований" на оптимизацию работы кода. Почему ему нужно следовать этим требованим?
Безусловно, качество повышается при внутренней самоорганизации и повышении требований к самому себе ... но на все это - нужно время ... и не месяц и не два ... и эти требования он должен предъявить себе сам, а не мы с вами. И уж если мы взялись и хотим помочь человеку с чем-то столь фундаментальным - давайте наберемся терпения, уважения и запасемся аргументами.
Причина в том, что он над этим не думает и в том, что не попадал в ситуации, когда начинаешь экономить чуть ли не каждый такт и байт ресурсов компьютера.
Возможно, стоит говорить, что его код не кривой, а не оптимизированный ... ведь по сути он выполняет сформулированную задачу?

0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
03.09.2014, 13:05 47
Цитата Сообщение от Антихакер32 Посмотреть сообщение
но вы уже перегибаете
зачем мне знать куда какой байт перекинулся на машинном уровне, когда реч идет
о квантах времени, и минимальном использовании памяти
Ты глубоко заблуждаешься. Когда задача стоит вроде этой, то в принципе это не имеет значения, но в более больших проектах это будет заметно. Тем более никто хорошего тона в программировании не отменял.
Цитата Сообщение от Антихакер32 Посмотреть сообщение
обычно вы и не разъясняете, я понимаю, ресурсы и прочее
Что? По-моему я один из немногих кто тестирует твои коды. Я не буду спорить с тобой, пиши что хочешь.
0
Заблокирован
03.09.2014, 13:15 48
Цитата Сообщение от StepInLik Посмотреть сообщение
..не попадал в ситуации, когда начинаешь экономить чуть ли не каждый такт и байт ресурсов компьютера.
помню-помню.. страшно вспоминать
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
03.09.2014, 13:16 49
Цитата Сообщение от StepInLik Посмотреть сообщение
Извините, не могу согласиться. Мы что, работаем в жестких условиях ограничения процессорного времени?
Я уже приводил пример кода с присвоением переменной на этот счет в этой теме. И все что я думаю на этот счет там же отписал. Это мое право - высказываться, тем более я это делаю не без оснований.
Цитата Сообщение от StepInLik Посмотреть сообщение
но на все это - нужно время ... и не месяц и не два ... и эти требования он должен предъявить себе сам, а не мы с вами.
Я ему написал совет как сделать лучше (я думаю так считают многие), но он не сделал как я просил. Я выставил свою оценку его "творчеству". Я не вижу в этом ничего плохого. Опять-таки - это мое право. Я бы мог ему понизить репу за это, но я не стал, т.к. знаю что он ей очень дорожит и что он не такой опытный программист чтобы его "наказывать" за плохие решения.
Цитата Сообщение от StepInLik Посмотреть сообщение
Причина в том, что он над этим не думает и в том, что не попадал в ситуации, когда начинаешь экономить чуть ли не каждый такт и байт ресурсов компьютера.
Он этот код выложил на всеобщее обозрение как готовое решение, этим кодом будут пользоваться люди - этот код должен быть хорошим, я помогаю в этом ему если никто так этого не понял.
0
StepInLik
03.09.2014, 13:16  [ТС]
  #50

Не по теме:

Цитата Сообщение от The trick Посмотреть сообщение
По-моему я один из немногих кто тестирует твои коды.
Коллега, можно вопрос не по теме? Тестируя код Антихакер32 - это ваша созидательная деятельность в развитии вашего коллеги? или в этом есть что-то еще?
Мне кажется в вашем общении есть что-то ограничивающее это общение ... может быть это стоит перезагрузить и в дальнейшем с уважением общаться на тему продуктивности и обменом знаниями?

0
Заблокирован
03.09.2014, 13:23 51
The trick, вы просто разъясните,
как можно по другому (не так, как у меня) реализовать, многократное использование таймера
тоесть из одного модуля вызывать паралелно разные процедуры в разных классах
и с разным интервалом..
а лучше напишите готовый пример (как сделал я), и я даже вам спасибо скажу (переплюну через себя, и скажу)
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
03.09.2014, 13:24 52
Цитата Сообщение от StepInLik Посмотреть сообщение
Тестируя код Антихакер32 - это ваша созидательная деятельность в развитии вашего коллеги?
Я тестирую все коды из раздела VB6, а не только его и даю им свою оценку. Но т.к. основная масса кодов от него, то получается он в основном его коды. И тестирую их для других, а не для авторов, для тех кто будет пользоваться ими.
Цитата Сообщение от StepInLik Посмотреть сообщение
Мне кажется в вашем общении есть что-то ограничивающее это общение ...
Ничего, по крайней мере с моей стороны.

По моему, коллеги, мы с вами ушли от темы.
По-теме, у меня есть предположение что можно сделать рабочий поток используя MSVBVM60, но там столько ньюансов (я как-то делал это в VB6), что думаю этот метод вряд ли кому-нибудь понравится. Могу рассказать, если интересно.

Добавлено через 34 секунды
Цитата Сообщение от StepInLik Посмотреть сообщение
может быть это стоит перезагрузить и в дальнейшем с уважением общаться на тему продуктивности и обменом знаниями?
Цитата Сообщение от Антихакер32 Посмотреть сообщение
и я даже вам спасибо скажу (переплюну через себя, и скажу)
Что тут можно сказать?
0
Антихакер32
03.09.2014, 13:27
  #53

Не по теме:

переплюнуть через себя, это оборот речи такой, что значит, усмирить свою гордость
это не в обиду было сказанно

0
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
03.09.2014, 13:30  [ТС] 54

Не по теме:

Цитата Сообщение от Антихакер32 Посмотреть сообщение
(переплюну через себя, и скажу)
Уважаемый, а вам сложно сказать спасибо? Для этого надо переплевывать? Возможно вам тоже стоит перезагрузить свое отношение к нашему коллеге The trick. У вас у обоих есть знания. У кого-то больше, у кого-то меньше ... все равно мы все живем здесь в одной комнате. Зачем какие-то распри? Насколько понимаю - цель форума делиться знаниями, а не эмоциями ...



Добавлено через 3 минуты
Цитата Сообщение от The trick Посмотреть сообщение
По-теме, у меня есть предположение что можно сделать рабочий поток используя MSVBVM60, но там столько ньюансов (я как-то делал это в VB6), что думаю этот метод вряд ли кому-нибудь понравится. Могу рассказать, если интересно.
Безусловно интересно. Тема живая и поддерживается производственными требованиями.
Цитата Сообщение от The trick Посмотреть сообщение
Ничего, по крайней мере с моей стороны.
Рад ошибаться!
0
Модератор
9724 / 3685 / 871
Регистрация: 22.02.2013
Сообщений: 5,530
Записей в блоге: 78
03.09.2014, 13:35 55
Цитата Сообщение от Антихакер32 Посмотреть сообщение
The trick, вы просто разъясните,
как можно по другому (не так, как у меня) реализовать, многократное использование таймера
тоесть из одного модуля вызывать паралелно разные процедуры в разных классах
и с разным интервалом..
Цитата Сообщение от The trick Посмотреть сообщение
Таймеры имеют параметр idEvent, в котором можно передавать пользовательскую информацию, в твоем случае идентифицирующую объект.
Сколько раз мне продублировать чтобы это было прочитано? Больше не буду.
Цитата Сообщение от Антихакер32 Посмотреть сообщение
переплюнуть через себя, это оборот речи такой, что значит, усмирить свою гордость это не в обиду было сказанно
Это видимо было ответом на
Цитата Сообщение от StepInLik Посмотреть сообщение
Мне кажется в вашем общении есть что-то ограничивающее это общение ...
Добавлено через 4 минуты
Цитата Сообщение от StepInLik Посмотреть сообщение
Безусловно интересно. Тема живая и поддерживается производственными требованиями.
Идея в том, что возможно VBA (32 bit) использует такую же схему инициализации потока как и VB6. Для инициализации потока нужно вызвать VBDllGetClassObject из MSVBVM60 (в самом простом случае), передавая хидер в одном из параметров. Вот если в VBA есть хидер от VB6-проекта, то тогда можно попытаться инициализировать контекст. Но там есть свои траблы с данными, котороые нужно смотреть на месте.
1
Антихакер32
03.09.2014, 13:39
  #56

Не по теме:

Цитата Сообщение от StepInLik Посмотреть сообщение
Мне кажется в вашем общении есть что-то ограничивающее это общение ...
конечно есть эта трудность :)
Кликните здесь для просмотра всего текста




совместно, дружно, можно было бы решить любую даже самую невероятную проблему
только *бы* мешает

0
StepInLik
03.09.2014, 13:56  [ТС]     Маленькое продолжение темы "Аналог Excel-метода "OnTime"" или про многопоточность
  #57

Не по теме:

Цитата Сообщение от Антихакер32 Посмотреть сообщение
только *бы* мешает
Поговите с модераторами и получите от них условия, при которых они будут готовы обнулить ваши нарушения. Они тоже люди и уверен! - оценят ваше желание и стремление. Это форум, а не калькулятор.
Если же речь за ваш показатель репутации - то IMHO это не те сантиметры ... на которые надо смотреть.
Больше уделяйте внимания вашей работе, а не каким-то абстрактным цифрам ... и постарайтесь прислушаться к этому совету.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2014, 13:56

Продолжение темы сортировки
Сортировка строк. Ха, несколько дней гугла помогли, встретил фразу "неуклюжее решение быстрой...

Продолжение темы: 1С Профессионал
Помогите пожалуйста с ответом на вопрос из комплекта сертификационных вопросов по экзамену...

Продолжение темы сортировки
Все равно не работает сортировка правильно, хотелось бы понять в чем проблема. Перенес с Delphi 7...

DLookUP( в продолжение темы)
Добрый день! в продолжение темы https://www.cyberforum.ru/ms-access/thread1520779.html появился...

В продолжение темы Чат на C#
В продолжении темы(используя сокеты в этот раз), такой вопрос: запущен сервер и 2 клиента. 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
57
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru