Wątki - tworzenie w różnych procesach i ich komunikacja.

0

Witam forumowiczów!

Mam pewien problem i niespecjalnie wiem jak sobie z nim poradzić. Piszę aktualnie program, który składać się ma z kilku dllek/exeków. Coś co działało by w tle, a ja móglbym się do tego odwoływać z poziomu innej aplikacji (i otrzymywać rezultaty wykonań). Potrzebuję taki sposób komunikacji między działającymi procesami/bibliotekami, aby mieć możliwość podłączania innych programów pod wątek, działający z poziomu tej dllki/procesu.

Podsumowując:

  1. jeden dll/proces z uruchomionymi własnymi wątkami,
  2. możliwość komunikowania się z nim/wątkami jak ze zwykłymi dll'kami, za pomocą procedur/funkcji lub inaczej.
    Z tym że kilka programów podłączonych do jednej dll'ki, musi mieć możliwość komunikowania się razem przez nią (każdy program nie alokuje oddzielnie pamięci na dll'ke, tylko podłącza się do jednej, wydzielonej juz pamięci).

Cos takiego, wiem, że można takie coś uzyskać za pomocą "pipes", być może strumieni (chociaż nie mam na to pomysłu) oraz tworzenia jednego okna, niewidocznego w tle przez tę dll'ke (zachowującą się jak serwer) i łączenia się za pomocą komunikatów systemowych.

Czy ma ktoś pomysł na rozwiązanie tego problemu?
Pozdrawiam forumowiczów i proszę o podpowiedź.

0
patryk_ja napisał(a):

Witam Forumowiczów !
Mam pewien problem i nie specjalnie wiem sobie jak z nim poradzic. Pisze aktualnie program, który składac się ma z kilku dll'ek / exe'kow.

Ale po co? Co to ma w ogóle robić i dlaczego tak?

  • Dlaczego DLL a nie BPL?
  • Dlaczego jest kilka plików wykonywalnych?
    Pytania mogą wydawać się bezsensowne, ale wierz mi - nie są.
    I pytanie drugie, będę pytał do znudzenia, jaka wersja Delphi?

Cos co dzialaloby w tle a ja moglbym sie do tego odwolywac z poziomu innej aplikacji (i otrzymywac rezultaty wykonan).

Teraz będzie pytanie mniej zasadne - wyniki mają być udostępnianie po zakończonym wątku czy w trakcie jego pracy?
Co to są za dane (rodzaj lub typ; będą to proste typy skalarne, tablice, rekordy, strumienie czy klasy?), które chcesz wymieniać pomiędzy wątkami?

Potrzebuje taki sposob komunikacji miedzy dzialającymi procesami / bibliotekami, aby miec mozliwosc podlączania innych programów pod wątek działający z poziomu tej dllki/procesu. Podsumowując:

  1. jeden dll/proces z uruchomionymi wlasnymi wątkami
  2. mozliwosc komunikowania się z nim/wątkami jak ze zwyklymi dllkami za pomocą procedur/funmkcji lub inaczej, z tymze kilka programów podłączonych do jednej dllki musi miec mozliwość komunikowania się razem przez nią (kazdy program nie allokuje oddzielnie pamięci na dllke tylko podlącza sie do jedneej wydzielonej juz pamieci).
    Cos takiego wiem ze mozna uzyskac za pomocą pipes, byc moze strumieni (chociaz nie mam na to pomyslu ) oraz tworzenia jednego okna niewidocznego w tle przez tą dllke (zachowującą sie jak serwer) i laczenia sie za pomocą komunikatów systemowych.
    Czy ma ktos pomysl na rozwiązanie tego problemu?

Tak, mam - ja bym użył do tego sieci (TCP/IP) i protokołu MQTT.
Dlaczego sieci? Bo działa lokalnie i nie tylko. A nuż zachce mi się rozproszyć zadanie na kilka komputerów? Wtedy żaden problem.
Dlaczego MQTT? Bo jest prosty, szybki i miły.

Możesz użyć armaty - np. darmowego mORMota, DataSnap czy RO SDK. Krzywa wejście będzie ogromna, ale doświadczenie - nie do przecenienia. No chyba, ze interesuje Cię prosta chałtura na zasadzie "zrobić i zapomnieć".
O właśnie - to powinno być pierwsze pytanie, bo jeśli tak - to z mojej strony pass.

Pozdrawiam Forumowiczów i proszę o podpowiedź

Mam jeszcze uwagę niemerytoryczną; pisz proszę po polsku i zapoznaj się z informacją jak się tu formatuje tekst.
Czytanie Twoich wypowiedzi nie będzie męczyło.

0

Możesz użyć:

Oba współpracują z różnymi językami i systemami operacyjnymi, więc aplikacja serwująca usługi będzie dość otwarta.

Inne rozwiązania:

Możesz się też bawić w semafory, named pipes, mailsloty, mutexy itd, ale to jest babranie się na niskim poziomie.
Zamiast programować aplikację będziesz programować middleware.

0
vpiotr napisał(a):

Możesz użyć:

Stare i nie wspierane dla nowych Delphi (jakaś wersja alfa sprzed roku dla XE2, hmmm...).
Poza tym, XML-RPC jest passe; dziś trendy jest REST(Full) ;-)

To jest armata, która wymaga serwera. I jeśli już z tym, to wolałbym użyć do tego komponentów HABARI. Używałem Habari z ActiveMQ - działa nieźle.
Analogicznym rozwiązaniem jest MQTT, ale nie wymaga zewnętrznego serwera. I dlatego uważam, że to po prostu lepszy pomysł.

Oba współpracują z różnymi językami i systemami operacyjnymi, więc aplikacja serwująca usługi będzie dość otwarta.

Inne rozwiązania:

Możesz się też bawić w semafory, named pipes, mailsloty, mutexy itd, ale to jest babranie się na niskim poziomie.
Zamiast programować aplikację będziesz programować middleware.

No właśnie, ale czy jest sens?
A tak poza konkursem - jakby to było DelphiXE6, to w ogóle bym się nie bawił i użyłbym do tego App Tethering:
http://fixedbycode.blogspot.com/2014/04/fun-with-delphi-xe6-app-tethering-and.html

0

named pipe. Mozesz uzyc Cromis IPC do tego. Sam uzywam tej biblioteki, jest bardzo szybko (wlasciwie to jest wspolna pamiec) i stabilne. Zero problemow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1