powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Хелп! Ожидание конца выполения внешней программы!
9 сообщений из 9, страница 1 из 1
Хелп! Ожидание конца выполения внешней программы!
    #34274442
zvanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем, я в функции записываю значения переменных в .txt файл, затем запускаю внешний экзешник, которым читаю из этого файла переменные, выполняю расчет и записываю в др. текстовый файл результат. Далее читаю этот результат.
Если все это выполнять в одной функции:
1. запись в txt1
2. запуск exe -> запись в txt2
3. чтение из txt2
то получается, что 3-ий пункт выполняется до того как закончит выполняться 2-ой пункт.
Помогите пжлста.
Я сие реализовал так (нашел в форуме):

Private Const INFINITE = &HFFFF
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject As Long) As Long

Public Sub WaitForProcessToEnd(cmdLine As String)
'You can substitute a discrete time
'value in milliseconds for INFINITE.
Dim retVal As Long, pID As Long, pHandle As Long
pID = Shell(cmdLine, 0)
pHandle = OpenProcess(&H100000, True, pID)
retVal = WaitForSingleObject(pHandle, INFINITE)
End Sub

Private Sub BtnCalcNewRollAdjustment_Click()
'запись в файл
........
'конец записи в файл
WaitForProcessToEnd Dir + "PravkaProekt.exe"
'чтение из файла
........
'конец чтения из файла
End Sub

Проблема здесь в том, что программа крутиться в компе круглосуточно и запускается эта фукнкция раз в 5 мин. Получается так, что чем большее кол-во раз ее запускают тем дольше приходится ждать окончания выполнения exe-файла. Приходится перезапускать комп примерно раз в сутки.
Подскажите, что здесь не так? или как это реализовать по другому, более надежно?

Реально exe-файл выполняется 1-3сек, но запуская его таким образом получается от 5сек до 5мин.
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34274454
zvanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, и все это делается в VBA.
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34275073
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вы проверяйте доступность txt2
Здесь на форуме недавно была такая тема (про доступность)

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34275381
zvanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да нет....
это мне надо сделать, чтоб сначала екзешник, запущенный изи VBA, выполнился и записал в txt2, а потом уже VBA прочитал из txt2.
а то иначе получается, что екзешник еще не записал, а VBA уже читает из него!
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34275391
zvanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) сори, не понял ответа....
дело в том, что екзешник может еще не занять txt2, а VBA уже прочитать....
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34275916
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvanya :) сори, не понял ответа....
дело в том, что екзешник может еще не занять txt2, а VBA уже прочитать....
1)ну если время известно, то можно sleep воткнуть, а уж потом проверять
2) ТХТ2 создается ЕХЕ или он постоянно существует?


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34276021
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если попробовать использовать семафоры?
тынц
exe1 создает семафор и запускает exe2
после этого exe1 курит пока семафор существует
exe2 выполняет свои действия и убирает семафор
exe1 видит что семафора нет, значит exe2 сделала все свои действия, значит можно работать дальше
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34276139
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так

Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Function DelayShell(Path As String) As String
Dim hKey As Long, hOpen As Long, hExit As Long
hKey = Shell(Path, vbHide)
hOpen = OpenProcess(KEY_DIAL, True, hKey)
Do
Call GetExitCodeProcess(hOpen, hExit)
DoEvents
Loop Until hExit <> STILL_ACTIVE
DelayShell = "Команда выполнена " & Path
End Function
...
Рейтинг: 0 / 0
Хелп! Ожидание конца выполения внешней программы!
    #34276255
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zvanyaПроблема здесь в том, что программа крутиться в компе круглосуточно и запускается эта фукнкция раз в 5 мин. Получается так, что чем большее кол-во раз ее запускают тем дольше приходится ждать окончания выполнения exe-файла. Приходится перезапускать комп примерно раз в сутки.
Подскажите, что здесь не так? или как это реализовать по другому, более надежно?

Реально exe-файл выполняется 1-3сек, но запуская его таким образом получается от 5сек до 5мин.
Не нужно использовать VBA для круглосуточных задач. В том что оно постепенно замедляется нет ничего удивительного, просто там кривая работа с памятью.
Перепеши процедуру формирования исходного txt, запуска чужой программы и дешифрацию полученого txt2 на что-нибудь более машино-дружелюбное, хотя бы на VB.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Хелп! Ожидание конца выполения внешней программы!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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