[so] CreateProcess
Catalin Alexandru
so@cursuri.cs.pub.ro
Mon, 1 Nov 2004 23:31:33 +0200
> CreateProcess() este suficient. Modul de tratare a
> cmd1|cmd2|cmd3 este identic cu cel cmd1&cmd2&cmd3, doar ca
> trebuie sa setezi stdin si stdout corespunzator.
De fapt problema se vede mai bine pe alt exemplu:
cmd1 && cmd2 & cmd3 && cmd4
Din cate inteleg eu, arborele care o sa rezulte in urma parsarii o sa arate
cam asa:
--- & ---
/ \
/ \
&& &&
/ \ / \
/ \ / \
cmd1 cmd2 cmd3 cmd4
Daca se incearca executarea din cadrul unui singur proces, prima comanda
lansata
va fi cmd1. Daca astept terminarea sa pentru a lansa cmd2 (ceea ce trebuie
sa fac
pentru ca "&&" e secventiala) nu o sa pot lansa cmd3 decat abia dupa ce
lansez
cmd2.
Problema este ca cele doua ramuri care vin din radacina trebuie pornite
deodata (adica
cmd1 && cmd2 trebuie pornit o data cu cmd3 && cmd4). Treaba asta nu se poate
face decat
din doua procese diferite (dar e complicat pentru ca trebuie transmis cumva
arborele
intre procese) sau din doua thread-uri diferite (dar astea cred ca sunt la
alta tema).
Ar mai fi o solutie, programarea executiilor cu ajutorul unui graf orientat,
dar as
vrea sa fiu sigur care e ideea inainte sa ma apuc sa modific ce am scris
pana acum.
Catalin