| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > fork() и exec() для билдера |
| Автор: froex 13.5.2009, 20:05 |
| В линуксе есть функция fork() для создания копии процесса. Также есть функция exec() для замены процесса другим. Есть ли эквиваленты этих функций в C++ Builder? |
| Автор: froex 13.5.2009, 21:10 |
| Нашел CreateProcess - сейчас буду испытывать, то или не то (описание функции в msdn). |
| Автор: mrbrooks 14.5.2009, 08:15 |
| froex, камрад - когда говоришь Билдер - подрузамеваем VCL. В VCL - я не встречал функций требуемых тебе. Ибо они есть в WinAPI. CreateProcess - одна из них - пожалуй это самый лучший для тебя вариант. Есть еще ShellExecute, WinExec. Не стоит забывать и про стандартную system. |
| Автор: froex 14.5.2009, 08:47 |
| А как мне лучше организовать следующее: Запускаю консольное приложение. Оно запускает исполняемый файл VCL-приложения. Но сама консоль еще работает. Когда закрывается VCL-приложение, то консольное приложение не должно закрываться, а когда закрывается консольное приложение, то запущенное VCL-приложение закрывается, если есть. Т.е. для обмена сообщениями мне надо хранить pid созданного процесса. В линуксе все просто: pid=fork(), далее сверяем и т.п. Если порожденный процесс, то заменял его с помощью exec(). Меня интересует, как создать именно так, чтобы сохранилась связь и нельзя было пользоваться дочерним приложением без родительского. |
| Автор: Dmi3ev 14.5.2009, 08:56 | ||
Когда закрывается VCL-приложение, то консольное приложение не должно закрываться,
|
| Автор: mrbrooks 14.5.2009, 08:58 |
| froex, Однозначно использовать CreateProcess. Внимательно почитай про эту функцию. Информации в нете полно. |
| Автор: Dmi3ev 14.5.2009, 09:02 | ||
| посмотри тут еще, там есть про pid http://licrym.org/samouch/7/03/index.html Добавлено через 1 минуту и 46 секунд
да, там флагов полно, помнится... |
| Автор: mrbrooks 14.5.2009, 09:07 |
не так страшен черт - как его малюют. |
| Автор: froex 14.5.2009, 10:04 |
| Как приду домой, то почитаю |
| Автор: xvr 14.5.2009, 11:46 | ||||
Это получится автоматом
А это надо делать. Нужно сообщить VCL приложению, что консольное закрылось. Есть 2 варианта:
|
| Автор: mrbrooks 14.5.2009, 13:12 |
| а не проще ли - зная дескриптор дочернего процесса (благодаря PROCESS_INFORMATION) вызвать TerminateThread и спокойно завалить этого мерзавца? |