2010-06-10 16 views
11

Potrzebuję przenośnej biblioteki C++ do robienia IPC. Używałem pamięci dzielonej fork() i SysV do tej pory, ale to ogranicza mnie do Linuksa/Uniksa. Dowiedziałem się, że istnieją 3 główne biblioteki C++, które oferują przenośne rozwiązanie (w tym Windows i Mac OS X). Naprawdę lubię Boost i chciałbym go użyć, ale potrzebuję procesów i wygląda na to, że do tej pory jest to tylko gałąź eksperymentalna !? Nigdy wcześniej nie słyszałem o ACE lub POCO i dlatego utknąłem, nie wiem, który wybrać. Potrzebuję fork(), sleep() (funkcja usleep() byłaby świetna) i pamięć dzielona oczywiście. Wydajność i dokumentacja są również ważnymi kryteriami.Przenośna biblioteka C++ dla IPC (procesy i pamięć współdzielona), Boost vs ACE vs Poco?

Dzięki za pomoc!

Odpowiedz

7

Wzmocnienie Interprocess istnieje od czasu zwiększenia 1.35 (co powinno przypominać 3 lata temu, jeśli pamięć służy).

ACE istnieje już od dłuższego czasu, ale z powodu dźwięku rzeczy to chyba przesada - ACE to biblioteka duża, a wydaje się, że potrzebujesz tylko niewielkiej części tego, co zawiera. To niekoniecznie jest poważny problem, ale należy o tym pamiętać. W szczególności biblioteka zaprojektowana z myślą o dużych projektach może wydawać się (lub być) nieco niezręczna dla mniejszych. ACE jest również przeznaczone przede wszystkim do rozwoju sieci, z IPC włączone, ponieważ (na przykład) może chcesz zbudować, co wydaje się być jednym serwerem z wielu współpracujących procesów, a jeśli tak, to oczywiście potrzebujesz sposobu na budowanie tych współpracujących procesów .

POCO jest bardziej podobny do ACE - jest to po prostu biblioteka sieciowa, która ma pewne zalety IPC. Ponownie, patrzysz na używanie całkiem małej części znacznie większej, bardziej ambitnej biblioteki.

Na podstawie tego, czego chcesz, prawdopodobnie użyłbym funkcji Boost - wydaje się, że najlepiej pasuje do tego, co chcesz. POCO byłby prawdopodobnie moim drugim wyborem. Chociaż jest on oddzielny od Boost, wydaje się w dużym stopniu podążać za podobną filozofią projektowania - w szczególności ma zintegrować się ze standardową biblioteką, w której ACE jest bardziej wszechogarniająca.

+0

"All-encompassing" - grzecznie to ujmuje. –

+1

Dziękuję, wykorzystam wtedy Boost. – Linoliumz

+0

walki: masz na myśli, że użyjesz klasy Boost.Process, która nie jest jeszcze w Boost? Wciąż jest w inkubatorze, ale może być już dobry. Jakie jest twoje doświadczenie? – Pietro

1

Lubię dodawać Apache portable runtime. To naprawdę nie jest C++, ale oczywiście możesz z niego korzystać. Nagłówki zawierają nawet "zewnętrzne" C "".

wliczony jest:

  • Shared Memory
  • Połączenia sieciowe
  • Sygnały
  • muteksy
  • wiele innych rzeczy.

Problem z doładowaniem polega na tym, że ma silne wymagania dla kompilatora C++. Szczególnie cross kompilatory mają problem z np. silne użycie szablonu, dzięki czemu zwykła biblioteka C jest "bardziej przenośna".

+0

Nie mogę mówić za wszystkich, ale osobiście miałem więcej problemów z budowaniem APR na Visual Studio, niż miałem Boost do budowania na dowolnej platformie. –

+0

Sztuką było dla mnie zdefiniowanie WIN32 – schoetbi

+0

Minęło trochę czasu odkąd zbudowałem APR, chociaż uaktualniamy program do Visual Studio 2010, więc zrobię to jeszcze raz.Wydaje mi się, że pamiętam aktualizację plików projektu Visual C++ 6, potrzebuję uzyskać wstępnie skonfigurowany plik config.h i możliwe, że wykonam jedną lub dwie inne rzeczy. –

Powiązane problemy