» »

[C#] prenos podatkov med aplikacijami

[C#] prenos podatkov med aplikacijami

ql000 ::

Imam eno zanimivo situacijo. Ena aplikacija teče v konzoli, kjer laufa kamero, in 3D roko za zajem koordinat. Poleg tega zbrane slike še obdela, da dobim ven iz slik 3D profil. Zadeva je več nitna in deluje zelo v redu tako kot je, kar pomeni, da se mi je niti pod razno ne da portat v formo. Ampak po drugi strani pa rezultat moram prikazat v neki aplikaciji z GUI-jem. Nekaj sem se špilal z poganjanjem forme iz konzole, sam mi zadeva smrdi na kilometer, ker brez dodatnega nitenja ne bo šlo.

Torej v bistvu je problem v tem, da imam aplikacjo v konzoli in GUI aplikacijo. Kakšni so najbolj efektivni načini za prenos podatkov med aplikacijami v takšnih primerih? Prenašal bi pa par vektorjev in nekaj spremenljivk v obeh smereh.

Zadevo bi potem poganjal na sledeč način:
1. start GUI aplikacije, ki pošlje nastavitve app. v konzoli
2. zagon meritve iz GUI aplikacije, kar pomeni, da GUI app. štarta konzolno app.
3. konzolna app. vrne rezultat (par vektorjev)

yeti ::

a) Poženeš aplikacijo z CreateProcess, s tem da v struktor STARTUPINFO nastavis svoje pipe za hStdInput, hStdOutput in hStdError. Potem se "obnašaš" kot če bi imel client server komunikacijo preko pip. Pridobis kompletno krmiljenje aplikacije.
b) Poženeš aplikacijo z "app.exe > txt.$tmp" in po končanju aplikacije prebereš podatke iz fajla
c) WM_COPYDATA nosi podatke med dvema oknoma *med processi*. konzolna aplikacija poišče okno (sploh ni nujno da visible) in mu posilja podatke
d) sharana memorija,...

Ma v glavnem jaz bi naredil z redirekcion std* pipov, sam se odloči, najverjetneje ti bo že redirekcija v datoteko cisto dovolj...

Zgodovina sprememb…

  • spremenil: yeti ()

ql000 ::

Kakšna je pa kaj hitrost?

ql000 ::

Zadevo sem rešil z pipelini. Dejansko sem implementiral tole rešitev: klik. Po natančnejši analizi interakcije aplikacij sem ugotovil, da bo komunikacija dejansko tekla v samo eno smer, kar olajša zadevo.

yeti ::

ql000; "Dejansko sem implementiral tole rešitev: klik."

uf ko bi se ze nehali naslanjat na znanje drugih in še sami kaj implementirali... :\

Hja ce moras pognat samo cmdline applikacijo z parametri, potem jo lahko pozenes kar z createprocess in z redirekcijo v fajl, s tem da na handlu od processa "visiš" z CreateForSingleObject in ko ti ga sproži preberes output fajl in to je to...

Zgodovina sprememb…

  • spremenil: yeti ()

ql000 ::

uf ko bi se ze nehali naslanjat na znanje drugih in še sami kaj implementirali...


Ne vem za kaj bi odkrival toplo vodo. Najdeš nekaj kar so drugi naredili in optimiziraš. Meni je glavno, da zadeva deluje kot sem si zamislil!

yeti ::

In zdaj znas sam spisat predvidevam ? :D

ql000 ::

Ne. Znam uporabljat! :D

No, v glavnem, zdej zadeva teče tako, da štartam iz aplikacije za prikaz obdelanih podatkov (prikaz 3D profila) konzolno aplikacijo, ki izvede meritev in te podatke vrne main app.

jerac ::

Res ne vem zakaj bi porabil za neko stvar 1h, če lahko 5min. Ko boš jo pa naslednjič rabil, pa jo boš pač spet poiskal. Dovolj je dela z ostalimi stvarmi.

yeti ::

Sicer je morda skoda crk ampak vseeno;

"Ker s tem siris znanje, si kar predstavljam prihodnost cez 20 let; horde poceni programerskih zombijev uporablja kocke, ki jih je spisala davno izumrla rasa pred 10 leti..."

Tako kot danes ziv bog (razen zelo redkih) ne zna vec rekonstruirat tcp session "na roko" ker imas n knjiznic in OS, ki to naredijo namesto tebe. Zato je redkokomu se jasno kako stvar sploh funkcionira.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Išče se Raspberry Pi - Raspbian poznavalec

Oddelek: Programiranje
212468 (1628) mm1992
»

Nov programer

Oddelek: Programiranje
173414 (2378) Isotropic
»

[C++] Preverjanje ce je program dos ali win32

Oddelek: Programiranje
211401 (1057) BigWhale
»

Projekt GNOME praznuje 10. obletnico (strani: 1 2 )

Oddelek: Novice / Ostala programska oprema
599544 (7908) 'FireSTORM'

Več podobnih tem