Форум » [x]Harbour » Как передать результат между ДВУМЯ exe-никами ? » Ответить

Как передать результат между ДВУМЯ exe-никами ?

Andrey: Как решить задачу: есть 2 моих ехе-ника, как вернуть результат действия второго ехе-ника в первый, который вызывает второй ? Ну типа такой задачи - из основного модуля вызывается доп.модуль EXE-ник (печать или почтовик и т.д.). Вот результат действий доп.модуля (отпечатал юзер документ или нет, ушло письмо на почту или нет) нужно вернуть в основной модуль, и результат записать с той записи в базе, откуда вызывался доп.модуль. Просто юзер может уйти с этой записи, или как то запретить уходить с этой записи, пока запущен Доп.модуль ? Может это и извращение, но нужно в базе видеть что было сделано с этой записью. Как можно реализовать такой алгоритм ?

Ответов - 16

petr707: А что мешает - В этой же (совместной расшаренной) таблице в этой же записи заполнить поле-отметку результата выполнения дочернего exe ( он ее и заполнит, если запись не будет блокирована )

Dima: Andrey пишет: Как можно реализовать такой алгоритм ? как вариант результат работы дочернего модуля записать в массив и сохранить его в файл а из основного модуля считать данные массива.

Andrey: petr707 пишет: ( он ее и заполнит, если запись не будет блокирована ) Запись блокирована в основной программе. Dima пишет: как вариант результат работы дочернего модуля записать в массив и сохранить его в файл а из основного модуля считать данные массива. А как быть, если юзер уйдет с этой записи ? Или вообще закроет базу ? А в доп.модуле еще ничего не сделает ?


petr707: какое дело дочернему процессу , что будет делать родитель? Вы передайте ему - номер или ИД записи таблицы, в которую нужно занести результат. У дочернего процесса - свой контекст исполнения, как будто это еще один юзер основной проги.

Dima: Andrey пишет: А как быть, если юзер уйдет с этой записи ? Или вообще закроет базу ? А в доп.модуле еще ничего не сделает ? Ну мона устроит ожидание если то что делает дочерняя прога не длится очень долго . Ждать результата от нее и анализировать.

Andrey: Dima пишет: Ну мона устроит ожидание если то что делает дочерняя прога не длится очень долго . Каким образом ?

Dima: Andrey пишет: Каким образом ? Мы этот вопрос уже похоже проходили. Создай файлик какой нить из основной проги и жди пока его не удалит дочерняя прога Возможно мьютексы можно заюзать.............(не проверял)

AlexMyr: Еще можно вести для таких целей самостоятельную базу-журнал-лог-событий и там смотреть кто что и когда сделал. А результат можно вернуть след. образом: [pre2] func main() local cOut, cErr, cCommand cCommand := "mingw32-make.exe" t1 := hb_processRun( cCommand, , @cOut, @cErr ) ?"cOut=",cOut ?"cErr=",cErr ?"t1=",t1 return nil[/pre2] результат: [pre2]C:\dev\test\hb_procces\>aa.exe cOut= cErr= mingw32-make.exe: *** No targets specified and no makefile found. Stop. t1= 2[/pre2] с другой прогой: [pre2]func main() local cOut, cErr, cCommand cCommand := "arj t arh.arj" t1 := hb_processRun( cCommand, , @cOut, @cErr ) ?"cOut=",cOut ?"cErr=",cErr ?"t1=",t1 return nil[/pre2] результат: [pre2]C:\dev\test\hb_procces\>aa.exe cOut= ARJ32 v 3.10, Copyright (c) 1998-2004, ARJ Software Russia. [23 Jun 2005] Extended attributes enabled Can't find arh.arj Found 1 error(s)! cErr= t1= 6[/pre2] т.е. смотреть cOut и cErr

Andrey: AlexMyr То что нужно ! Спасибо БОЛЬШОЕ !

Pasha: Функцией ErrorLevel( <nValue> ) можно установить значение ErrorLevel 2-й программы, которое потом проанализировать после вызова __Run() или hb_processRun() в вызывающей программе.

Andrey: Pasha, спасибо ! Хочется большего, передать не только код, но и еще строковые данные...

Dima: Andrey пишет: Хочется большего, передать не только код, но и еще строковые данные... Вариант FT_SAVEARR, FT_RESTARR

Andrey: Dima пишет: Вариант FT_SAVEARR, FT_RESTARR

petr707: dbf - Это не только место хранения данных (обмена) для разных юзеров одной программы, но и разных программ одного юзера! :-) P/s/ Cмайлики почему-то перестали вставляться!

Andrey: petr707 пишет: но и разных программ одного юзера! :-)

fokinal21: AlexMyr пишет: func main() local cOut, cErr, cCommand cCommand := "mingw32-make.exe" t1 := hb_processRun( cCommand, , @cOut, @cErr ) ?"cOut=",cOut ?"cErr=",cErr ?"t1=",t1 return nil Подскажите, где посмотреть про hb_processRun() более подробно? Особенно нужен перечень и трактовка возвращаемых значений, здесь t1 Как понимаю, по ним можно судить об удачности выполнения запускаемого процесса. Спасибо!



полная версия страницы