28.01.2013 Views

1. Procese Windows; comunicaţii prin pipe şi IPC 2

1. Procese Windows; comunicaţii prin pipe şi IPC 2

1. Procese Windows; comunicaţii prin pipe şi IPC 2

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Procese</strong> <strong>Windows</strong>; <strong>comunicaţii</strong> <strong>prin</strong> <strong>pipe</strong> <strong>şi</strong> <strong>IPC</strong> - 7 -<br />

Cea mai simplă dintre aceste funcţii <strong>şi</strong> cea mai des utilizată este WaitForSingleObject,<br />

al cărei prototip îl vom prezenta <strong>şi</strong> pe care o vom utiliza <strong>şi</strong> noi în secţiunile următoare. Pentru<br />

detalii privind celelalte funcţii recomandaconsultarea MSDN.<br />

DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMillisec);<br />

hHandle -handler-ul obiectului la care se aşteaptă<br />

dwMillisec -intervalul de timp maxim de aşteptare. Valoarea INFINITE indică aşteptare<br />

până la semnalarea obiectului.<br />

Funcţia poate să întoarcă următoarele valori:<br />

� WAIT_ABANDONED -dacă obiectul nu a fost eliberat de threadul său proprietar înainte<br />

ca apelul să se termine<br />

� WAIT_OBJECT_O -dacă obiectul a fost semnalat<br />

� WAIT_TIMEOUT -dacă intervalul de timp a expirat<br />

<strong>1.</strong>3. Lucrul cu procese sub <strong>Windows</strong><br />

<strong>1.</strong>3.<strong>1.</strong> Crearea unui proces<br />

Crearea unui proces în <strong>Windows</strong> se face <strong>prin</strong> apelul funcţiei CreateProcess dintr-un alt<br />

proces. Funcţia are următorul prototip:<br />

BOOL CreateProcess (LPCTSTR lpszImageName,<br />

LPCTSTR lpszCommandLine,<br />

LPSECURITY_ATTRIBUTES lpsaProcess,<br />

LPSECURITY_ATTRIBUTES lpsaThread,<br />

BOOL fInheritHandles,<br />

DWORD fdwCreate,<br />

LPVOID lpvEnvironment,<br />

LPTSTR lpszCurDir,<br />

LPSTARTUPINFO lpsiStartInfo,<br />

LPPROCESS_INFORMATION lppiProcInfo);<br />

Atunci când se apelează funcţia CreateProcess, sistemul creează un spaţiu de adresare <strong>şi</strong><br />

încarcă noul proces în acest spaţiu. După această operaţie, sistemul creează threadul primar<br />

pentru noul proces <strong>şi</strong>-l lansează în execuţie. Să vedem semnificaţia parametrilor funcţiei<br />

CreateProcess:<br />

lpszImageName - parametrul identifică numele fi<strong>şi</strong>erului executabil în care este memorat<br />

codul pentru procesul ce se va crea. CreateProcess va căuta fi<strong>şi</strong>erul mai întâi în directorul<br />

curent, <strong>şi</strong> apoi în directoarele descrise de variabila de mediu PATH. Dacă acest parametru<br />

este NULL, funcţia va lua numele fi<strong>şi</strong>erului din primul cuvânt al liniei de comandă<br />

specificată de parametrul lpszCommandLine.<br />

lpszCommandLine - parametrul specifică argumentele care trebuie transmise către noul<br />

proces. La pornirea procesului, aceste argumente vor fi regăsite în argumentul<br />

lpszCmdLine al funcţiei WinMain. lpszCommandLine punctează către un sir de<br />

caractere ANSI.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!