Hi again.
Now I'm trying to write a example of critical sections but it's not work. why?
NOTE: main function only call Inicio function.
Code:#define NTHREADS 500 #define MAXCADENA 10 #define MAXTIMESLEEP 50 CRITICAL_SECTION CriticalSection_Cadena; void Inicio (void); char sCadena[MAXCADENA]; int nNumero; int Aleatorio(int nMin, int nMax) { UINT nNumero; rand_s(&nNumero); int nRes = (UINT)((double)nNumero / (double) UINT_MAX * (double)nMax) + nMin; return nRes; } void WINAPI fx(void) { EnterCriticalSection(&CriticalSection_Cadena); char c = Aleatorio(48, 90); // del 48 al 90 las letras int nPos = Aleatorio(0, (MAXCADENA-1)); sCadena[nPos] = c; nNumero = c; LeaveCriticalSection(&CriticalSection_Cadena); } void Inicio (void) { srand(time(NULL)); memset(sCadena, '-', sizeof(char) * MAXCADENA); void (WINAPI *vfx[NTHREADS])(); // matriz de NTHREADS de punteros a funciones // Creamos las funciones for(int i=0;i<NTHREADS;i++) { vfx[i] = fx; } InitializeCriticalSection(&CriticalSection_Cadena); HANDLE vhThread[NTHREADS]; // Abro los hilos for(int i=0;i<NTHREADS;i++) { vhThread[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)vfx[i], NULL, 0, 0); } WaitForMultipleObjects(NTHREADS, vhThread, TRUE, INFINITE); sCadena[MAXCADENA-1] = '\0'; for(int i=0;i<NTHREADS;i++) { CloseHandle(vhThread[i]); } DeleteCriticalSection(&CriticalSection_Cadena); MessageBox(NULL, sCadena, "Cadena", MB_OK); }




Reply With Quote