Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Хелп! Ожидание конца выполения внешней программы! / 9 сообщений из 9, страница 1 из 1
23.01.2007, 11:20
    #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
23.01.2007, 11:23
    #34274454
zvanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хелп! Ожидание конца выполения внешней программы!
Да, и все это делается в VBA.
...
Рейтинг: 0 / 0
23.01.2007, 13:31
    #34275073
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хелп! Ожидание конца выполения внешней программы!
а вы проверяйте доступность txt2
Здесь на форуме недавно была такая тема (про доступность)

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


I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
23.01.2007, 16:37
    #34276021
Nikz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хелп! Ожидание конца выполения внешней программы!
А если попробовать использовать семафоры?
тынц
exe1 создает семафор и запускает exe2
после этого exe1 курит пока семафор существует
exe2 выполняет свои действия и убирает семафор
exe1 видит что семафора нет, значит exe2 сделала все свои действия, значит можно работать дальше
...
Рейтинг: 0 / 0
23.01.2007, 17:10
    #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
23.01.2007, 17:42
    #34276255
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хелп! Ожидание конца выполения внешней программы!
zvanyaПроблема здесь в том, что программа крутиться в компе круглосуточно и запускается эта фукнкция раз в 5 мин. Получается так, что чем большее кол-во раз ее запускают тем дольше приходится ждать окончания выполнения exe-файла. Приходится перезапускать комп примерно раз в сутки.
Подскажите, что здесь не так? или как это реализовать по другому, более надежно?

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


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