Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: сложная функция / 10 сообщений из 10, страница 1 из 1
10.02.2011, 07:19
    #37108107
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
VBA

Может ли функция перед тем как возвращать значение вызвать процедуру, но при этом продолжать свою работу, а вот процедура при этом должна подождать полного завершения работы функции и только после этого начать свою работу?

Объясню на примере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' Где-то (неважно где) в программе вызываем функцию
НекаяПеременная = МояФункция()

' Тело функции
Function МояФункция() AS Boolean
    НекаяПроцедура
    ' Вот здесь каким-то макаром нужно продолжить работу функции
    МояФункция = True
End Function

Sub НекаяПроцедура()
    ' Вот здесь каким-то макаром должны проверить завершила ли свою работу МояФункция
    If ... Then
    ' Если не завершила, то подождать завершения.
    ' Если завершила, то только после этого начать работу процедуры.
End Sub
...
Рейтинг: 0 / 0
10.02.2011, 07:49
    #37108120
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
Это многопоточность.
Если ваши функции будут в отдельном потоке то всё получится.
Задача вообще какая стоит, ради чего это надо?
...
Рейтинг: 0 / 0
10.02.2011, 08:16
    #37108135
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
studieren, как вариант (если это VBA):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public flag As Boolean 

Sub test_1()
    Dim i As Long
    flag = False
    MsgBox "test_1"
    Application.OnTime  1 , "test_2"
    For i =  1  To  100000000 
    Next
    flag = True: Exit Sub
End Sub

Sub test_2()
    Do While Not flag
        DoEvents
    Loop
    MsgBox "test_2"
End Sub
...
Рейтинг: 0 / 0
10.02.2011, 08:33
    #37108145
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
Green2Это многопоточность.
Если ваши функции будут в отдельном потоке то всё получится.
Задача вообще какая стоит, ради чего это надо?

Для решения одной частной задачки в MS Access мне требуется подобная функция.
А как реализовать в VBA многопоточность? DoEvents?


.Михаил., Ваш вариант мне чуть-чуть не подходит, ибо в MS Access нет возможности на "Application.OnTime". Там нет такого метода. А ради него не хочется подключаться к Excel.
...
Рейтинг: 0 / 0
10.02.2011, 08:38
    #37108158
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
А может быть есть какая-та Win API функция, работающая как "Application.OnTime"?
Никто не подскажет?
...
Рейтинг: 0 / 0
10.02.2011, 10:28
    #37108369
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
studieren,

если у вас Access, то я перенесу топик в соответсвующий форум.
...
Рейтинг: 0 / 0
10.02.2011, 11:19
    #37108499
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
big-dukestudieren,

если у вас Access, то я перенесу топик в соответсвующий форум.

Но вопрос-то по большому счёту касается только VBA?
...
Рейтинг: 0 / 0
10.02.2011, 11:40
    #37108556
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
studierenGreen2Задача вообще какая стоит, ради чего это надо?

Для решения одной частной задачки в MS Access мне требуется подобная функция.
А как реализовать в VBA многопоточность? DoEvents?
Без задачки все равно непонятно, почему нельзя сделать
Код: plaintext
1.
2.
3.
4.
Function МояФункция() AS Boolean
    ...
    МояФункция = True
    НекаяПроцедура
End Function
потому что в ТЗ написано именно это.

И чем вас не устраивает DoEvents в пустом цикле процедуры тоже непонятно
...
Рейтинг: 0 / 0
10.02.2011, 11:47
    #37108574
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
Кажется вот это 9787536 больше подойдёт. Там код с Win API функциями.
Попробую экспериментировать.
...
Рейтинг: 0 / 0
10.02.2011, 12:11
    #37108666
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: сложная функция
Shocker.ProБез задачки все равно непонятно, почему нельзя сделать
Код: plaintext
1.
2.
3.
4.
Function МояФункция() AS Boolean
    ...
    МояФункция = True
    НекаяПроцедура
End Function
потому что в ТЗ написано именно это.

И чем вас не устраивает DoEvents в пустом цикле процедуры тоже непонятно

Задачку не могу описать здесь, тогда точно модератор выгонит топик в MS Access.
Модератор:
Не говорите ерунды. Это было лишь предложение перейти в Access.

Поменять местами функцию и процедуру также не подходит. Я наверное неправильно (не точно) написал ТЗ: функция не только должна возвращать значение, но также прекратить свою работу.
Мне просто "DoEvents" без подтверждения завершении работы функции также не интересно. Для этого пожалуй использую "flag" как посоветовал .Михаил. Т.е. внутри функции в самом начале будет "flag = True", а перед самым завершением напишу "flag = False". А процедура проверит значение flag, если оно true, значит функция всё-ещё работает, а если false, вот здесь процедура начнёт основную свою работу.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: сложная функция / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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