Russian Qt Forum

Qt => Общие вопросы => Тема начата: Павел_F. от Март 24, 2010, 10:25



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


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: BRE от Март 24, 2010, 11:05
Ничем, не на всех платформах есть подобный системный вызов.
Тут нужно смотреть по логике работы программы, для чего она форкается и что делает после этого.


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: Павел_F. от Март 24, 2010, 11:14
Я знаю что не у всех есть. Это сервер. После форка один продолжает ждать новых клиентов, а в другом начинается обмен с подключившимся. Можно переделать на потоки, а не процессы... Но в этом еще нужно убедить заказчика, а это не просто. Просто смотрю в сторону QProcess и теплится надежда...


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: p166 от Март 25, 2010, 09:49
Fork делает копию памяти процесса и оставляет его жить собственной жизнью без какой либо связи с головным приложением, такая функция существует только в Linux! В случае кроссплатформенного решения тут поможет только полная переделка на потоки, хотя это и не обеспечит прежней логики, работать будет, но, повторюсь, потребуется довольно большая переделка всего приложения.

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


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: Павел_F. от Март 25, 2010, 09:59
Это я знаю.
Хотя всегда думал что fork() в POSIX есть, не только в Linux. Уже переделываю на потоки.


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: gigabyte от Март 25, 2010, 11:15
Если будети время взгляни на Firebird Classic Server там что-то подобное сделано т.е. сидит один "смотрящий" сервер и при поступлении конектор запускает свои же копии которые уже их и обрабатывают. Єто под виндой тоже работает


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: Павел_F. от Март 25, 2010, 11:21
Тут такой момент что сделать с нуля и переделать то что есть это разные вещи. Так сделать можно. Но это нужно изначально учитывать еще до написания кода. У меня же все уже сделано да не так. И хочется переделать с минимальными потерями а не написать такой же но другой с нуля.


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: Пантер от Март 25, 2010, 11:24
PostgreSQL тоже делает по экземпляру на клиента.


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: gigabyte от Март 25, 2010, 12:07
Вывод?
Кросплатформенный fork() - есть. может не в том смысле как в Linux то он есть.


Название: Re: кроссплатформенный fork() в Qt?
Отправлено: Rcus от Март 25, 2010, 12:09
В Cygwin есть эмуляция fork(), но после чтения того как это делается желание использовать отпадает.