Execute and wait v threadu

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
Odgovori
odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Execute and wait v threadu

Odgovor Napisal/-a odisej » 26.03.2010 10:23:53

Imamo ActiveX CCube kontrolo, za olap. Sedaj bi radi kocke gradili v threadih. Ker je CCube kontrola, bo verjetno problem. Nekdo je prišel na idejo, da bi vsak thread klical zunanji cmd programček, ki bi kocko zgradil. Programček bi klical z execute and wait. Zdej me zanima, a ma kdo kakšne izkušnje na to temo. Se to sploh da?

zippo
Prispevkov: 264
Pridružen: 14.07.2002 12:11:29

Execute and wait v threadu

Odgovor Napisal/-a zippo » 26.03.2010 11:46:25

Pozdravljen!

Ne razumem, zakaj bi potreboval thread za poganjanje zunanjega programčka. Načeloma se jih da pognati brez čakanja in se potem vse skupaj obnaša podobno, kakor da so ločeni threadi. Morda pa sem le narobe razumel?

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Execute and wait v threadu

Odgovor Napisal/-a odisej » 26.03.2010 12:21:40

Moj thread more pripravit kocko in jo dat naprej. Priprava kocke poteka z eno kontrolo, ki je vizualna. Če bi to kontrolo uporabil v threadu, bi menda prihajalo do problemov. In se je pojavila ideja, da se ta kontrola da v nek drug cmd programček (tam bo itak nevidno delovala) in se bo iz threada klical ta programček. Thread pa ga mora počakat.

Uporabniški avatar
Lee_Nover
Prispevkov: 3653
Pridružen: 20.05.2001 14:31:55

Execute and wait v threadu

Odgovor Napisal/-a Lee_Nover » 26.03.2010 18:24:20

ce direktno instanciras to activex kontrolo s CoCreateInstance, potem ne rabis posebaj programa, ker mora itak znat laufat med razlicnimi konteksti, kar dolocis, ko instanciras.
samo pazi, da bos v vsaki niti inicializiral com s CoInitialize in potem pocistil s CoUninitialize, vmes pa naredis kontrolo in delas z njo.
.. my 2 c ..
- I hate noobs -

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Execute and wait v threadu

Odgovor Napisal/-a Runner » 27.03.2010 08:37:48

Točno tako kot je rekel Lee. ActiveX se brez problema uporablja v threadih. Edini problem bi lahko bil če imaš ti to "wrapped" v kakšno VCL kontrolo ki ne bi bila thread safe naprimer. Skratka če ne gre drugače in boš rabil posebej process zato narediš takole:

1. ActiveX daš v svoj process
2. Uporabiš nek IPC. Naprimer moj ki ga dobiš tule je čisto preprost za uporabo in izredno hiter.
3. Štartaš IPC request ki že sam po sebi blokira (blocking).
4. Na drugi strani v procesu narediš svoje in vrneš rezultat.

Če nočeš blokirati GUI-ja seveda, štarta to poizvedbo v ločenem threadu. Recimo za take namene imam TTaskPool ki zelo olajša izdelavo taskov v ozadju. Itak pa imaš tudi OmniThreadLibrary ki je pa tako ali tako namenjen background taskom.
Poglej si demo-te ki jih imam zraven kode. Tam imamš vse to demonstrirano.

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Execute and wait v threadu

Odgovor Napisal/-a Runner » 27.03.2010 09:46:46

Dodal sem v demo še primer asinhronega IPC requesta. Potegni dol IPC in poglej demo.
Zadnjič spremenil Runner, dne 27.03.2010 09:51:45, skupaj popravljeno 1 krat.

Odgovori