Поиск:

Ответ в темуСоздание новой темы Создание опроса
> fork() и exec() для билдера, может есть эквивалент? 
:(
    Опции темы
froex
  Дата 13.5.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 6.3.2009

Репутация: нет
Всего: нет



В линуксе есть функция fork() для создания копии процесса. Также есть функция exec() для замены процесса другим. Есть ли эквиваленты этих функций в C++ Builder?
PM MAIL ICQ   Вверх
froex
Дата 13.5.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 6.3.2009

Репутация: нет
Всего: нет



Нашел CreateProcess - сейчас буду испытывать, то или не то (описание функции в msdn).

PM MAIL ICQ   Вверх
mrbrooks
Дата 14.5.2009, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



froex, камрад - когда говоришь Билдер - подрузамеваем VCL. В VCL - я не встречал функций требуемых тебе. Ибо они есть в WinAPI.
CreateProcess - одна из них - пожалуй это самый лучший для тебя вариант.

Есть еще ShellExecute, WinExec.
Не стоит забывать и про стандартную system.


PM MAIL   Вверх
froex
Дата 14.5.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 6.3.2009

Репутация: нет
Всего: нет



А как мне лучше организовать следующее: Запускаю консольное приложение. Оно запускает исполняемый файл VCL-приложения. Но сама консоль еще работает. Когда закрывается VCL-приложение, то консольное приложение не должно закрываться, а когда закрывается консольное приложение, то запущенное VCL-приложение закрывается, если есть.

Т.е. для обмена сообщениями мне надо хранить pid созданного процесса. В линуксе все просто: pid=fork(), далее сверяем и т.п. Если порожденный процесс, то заменял его с помощью exec().

Меня интересует, как создать именно так, чтобы сохранилась связь и нельзя было пользоваться дочерним приложением без родительского.

Это сообщение отредактировал(а) froex - 14.5.2009, 08:48
PM MAIL ICQ   Вверх
Dmi3ev
Дата 14.5.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



Когда закрывается VCL-приложение, то консольное приложение не должно закрываться,
Цитата

ShellExecute


Это сообщение отредактировал(а) Dmi3ev - 14.5.2009, 08:58


--------------------

PM MAIL   Вверх
mrbrooks
Дата 14.5.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



froex, Однозначно использовать CreateProcess. Внимательно почитай про эту функцию. Информации в нете полно.


PM MAIL   Вверх
Dmi3ev
Дата 14.5.2009, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 16
Всего: 41



посмотри тут еще, там есть про pid
http://licrym.org/samouch/7/03/index.html

Добавлено через 1 минуту и 46 секунд
Цитата

froex, Однозначно использовать CreateProcess. Внимательно почитай про эту функцию. Информации в нете полно.

да, там флагов полно, помнится...


--------------------

PM MAIL   Вверх
mrbrooks
Дата 14.5.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Dmi3ev @  14.5.2009,  09:02 Найти цитируемый пост)
да, там флагов полно, помнится... 

не так страшен черт - как его малюют.  smile матчасть надо знать.
PM MAIL   Вверх
froex
Дата 14.5.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 6.3.2009

Репутация: нет
Всего: нет



Как приду домой, то почитаю smile все никак до документации по этим функциям не доберусь
PM MAIL ICQ   Вверх
xvr
Дата 14.5.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(froex @ 14.5.2009,  08:47)
А как мне лучше организовать следующее: Запускаю консольное приложение. Оно запускает исполняемый файл VCL-приложения. Но сама консоль еще работает. Когда закрывается VCL-приложение, то консольное приложение не должно закрываться, 

Это получится автоматом
Цитата

а когда закрывается консольное приложение, то запущенное VCL-приложение закрывается, если есть.

А это надо делать.
Нужно сообщить VCL приложению, что консольное закрылось. Есть 2 варианта:
  •  Консольное приложение явно говорит всем запущенным VCL приложениям, что оно собирается закрыться (например через именованный Event, см. CreateEvent и OpenEvent). В VCL приложении нужно создать TThread, который будет ждать Event'а, после чего делать Close главной формы (через Synchronize)
  •  Другой вариант сообщить о закрытии - найти окно VCL приложения и послать ему WM_CLOSE
  •  Альтернатива - VCL приложение получает Process ID консольного (GetCurrentProcessId) параметром и мониторит, что процесс с этим ID существует (OpenProcess). Как процесс закончился, VCL приложение закрывается
Первый вариант имеет недостаточ, что если консольный процесс сломается, то VCL'ный об этом не узнает


PM MAIL   Вверх
mrbrooks
Дата 14.5.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



а не проще ли - зная дескриптор дочернего процесса (благодаря PROCESS_INFORMATION)  вызвать TerminateThread и спокойно завалить этого мерзавца?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.