Russian Qt Forum
Ноябрь 27, 2024, 04:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: кроссплатформенный fork() в Qt?  (Прочитано 7614 раз)
Павел_F.
Гость
« : Март 24, 2010, 10:25 »

Переделываю прогу. Изначально она на с++ под Linux. Цель моя переделать ее на кроссплатформенное Qt. В коде постоянно встречаются такие куски:
Код
C++ (Qt)
if ( fork()==0)
{
  ...
  ...
  ...
}
else
{
  ...
  ...
  ...
}
 
Чем заменить? Никак не соображу...
Записан
BRE
Гость
« Ответ #1 : Март 24, 2010, 11:05 »

Ничем, не на всех платформах есть подобный системный вызов.
Тут нужно смотреть по логике работы программы, для чего она форкается и что делает после этого.
Записан
Павел_F.
Гость
« Ответ #2 : Март 24, 2010, 11:14 »

Я знаю что не у всех есть. Это сервер. После форка один продолжает ждать новых клиентов, а в другом начинается обмен с подключившимся. Можно переделать на потоки, а не процессы... Но в этом еще нужно убедить заказчика, а это не просто. Просто смотрю в сторону QProcess и теплится надежда...
Записан
p166
Гость
« Ответ #3 : Март 25, 2010, 09:49 »

Fork делает копию памяти процесса и оставляет его жить собственной жизнью без какой либо связи с головным приложением, такая функция существует только в Linux! В случае кроссплатформенного решения тут поможет только полная переделка на потоки, хотя это и не обеспечит прежней логики, работать будет, но, повторюсь, потребуется довольно большая переделка всего приложения.

А заказчику нужно сказать, что в связи с ограничением других ОС, необходимо пределать на потоки, или пусть забудет про кроссплатформенность.
« Последнее редактирование: Март 25, 2010, 09:53 от p166 » Записан
Павел_F.
Гость
« Ответ #4 : Март 25, 2010, 09:59 »

Это я знаю.
Хотя всегда думал что fork() в POSIX есть, не только в Linux. Уже переделываю на потоки.
Записан
gigabyte
Гость
« Ответ #5 : Март 25, 2010, 11:15 »

Если будети время взгляни на Firebird Classic Server там что-то подобное сделано т.е. сидит один "смотрящий" сервер и при поступлении конектор запускает свои же копии которые уже их и обрабатывают. Єто под виндой тоже работает
Записан
Павел_F.
Гость
« Ответ #6 : Март 25, 2010, 11:21 »

Тут такой момент что сделать с нуля и переделать то что есть это разные вещи. Так сделать можно. Но это нужно изначально учитывать еще до написания кода. У меня же все уже сделано да не так. И хочется переделать с минимальными потерями а не написать такой же но другой с нуля.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Март 25, 2010, 11:24 »

PostgreSQL тоже делает по экземпляру на клиента.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gigabyte
Гость
« Ответ #8 : Март 25, 2010, 12:07 »

Вывод?
Кросплатформенный fork() - есть. может не в том смысле как в Linux то он есть.
Записан
Rcus
Гость
« Ответ #9 : Март 25, 2010, 12:09 »

В Cygwin есть эмуляция fork(), но после чтения того как это делается желание использовать отпадает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.211 секунд. Запросов: 23.