Crearea de fire

Următorul exemplu demonstrează modul de creare a unui fir nou care efectuează o funcție definită la nivel local, ThreadFunc.

DWORDWINAPIThreadFunc (LPVOID lpParam)







wsprintf (szMsg, "Parametru =", * (DWORD *) lpParam);

MessageBox (NULL, szMsg, "ThreadFunc", MB_OK);

DWORD dwThreadId, dwThrdParam = 1;

NULL, // atributele de securitate implicite

0, // dimensiunea stivei este folosită în mod implicit

ThreadFunc. // flux

dwThrdParam, // argumentul funcției flux

0, // sunt utilizate în mod implicit steaguri de creare

dwThreadId); // returnează ID-ul fluxului

// Dacă are succes, verifică valoarea returnată.

Pentru simplificare, acest exemplu trece un indicator la o valoare ca parametru pentru funcția flux. Acesta poate fi un pointer la orice tip de date sau structură, sau poate fi sărit în întregime, prin transmiterea unui pointer NULL și eliminarea referințelor la un parametru în ThreadFunc.

În procesele în care un fir poate crea fire multiple pentru a executa un anumit cod, este incomod să se utilizeze variabile globale. De exemplu, un proces care permite unui utilizator să deschidă mai multe fișiere în același timp pentru o perioadă poate crea un fir nou pentru fiecare fișier, cu scopul ca fiecare fir să efectueze anumite funcții de flux. Procesul original poate transmite ca parametru informații unice (cum ar fi numele fișierului) necesare pentru fiecare instanță a funcției de flux. Nu puteți utiliza o singură variabilă globală în acest scop, dar puteți utiliza un tampon șir alocat dinamic.







Firele de creare pot folosi parametrii funcției CreateThread. pentru a determina următoarele:

  • Atribute de securitate pentru noul descriptor de fir. Aceste atribute de securitate includ un steag de mostenire care determină dacă descriptorul poate fi moștenit de procesele copilului. Atributele sistemului de securitate includ, de asemenea, un descriptor de securitate pe care sistemul îl folosește pentru a efectua accesul care controlează toate utilizările ulterioare ale descriptorului de fir înainte de acordarea accesului.
  • Dimensiunea inițială a stiva noului fir. Stack-ul firului este atribuit automat în spațiul de memorie proces; Sistemul crește teancul după cum este necesar și îl eliberează când firul își termină lucrările. Pentru mai multe informații, consultați dimensiunea stack-ului.
  • Creați caseta de selectare. care vă permite să creați un fir într-o stare în așteptare. Când apare o pauză, firul nu pornește până când nu este apelată funcția ResumeThread.






Articole similare

Trimiteți-le prietenilor: