06/01/11 19:29
2_rici
salve a tutti,
mi sto accingendo a parallelizare delle parti del mio codice.
Volevo però un consiglio su come farlo in quanto le alcune prove che ho fatto non mi hanno soddisfatto molto.
Spiego velocemente il contesto.
Ho un file output_ls contente nomi di immagini, leggo linea per linea e richiamo la funzione sift che mi crea un file di testo contenente i sift.
Il mio non è tanto un problema di come fare con i thread più che altro qual'è la soluzione migliore, io avevo pensato di leggere una linea e passarla al thread che si occupi del sift e nel mentre passare un altra linea.
Mi è venuta fuori una cosa del genere che però mi pare vada sempre in seriale : (
è un codice un pò improvvisato con nomi di variabile ancora molto "fantasiosi" per brutta abitudine faccio pulizia del codice quasi sempre verso la fine
spero comunque di essermi spiegato.
grazie!
Saluti
Riccardo
p.s: non capisco come mai mi da presumibilmente codice Delphi
mi sto accingendo a parallelizare delle parti del mio codice.
Volevo però un consiglio su come farlo in quanto le alcune prove che ho fatto non mi hanno soddisfatto molto.
Spiego velocemente il contesto.
Ho un file output_ls contente nomi di immagini, leggo linea per linea e richiamo la funzione sift che mi crea un file di testo contenente i sift.
Il mio non è tanto un problema di come fare con i thread più che altro qual'è la soluzione migliore, io avevo pensato di leggere una linea e passarla al thread che si occupi del sift e nel mentre passare un altra linea.
Mi è venuta fuori una cosa del genere che però mi pare vada sempre in seriale : (
void *sift_thread (void* st) { char* str; string name; size_t split; string pgm="../Sift_Immagini/"; string pgm_C=pgm; str = (char*) st; string line(str); if ( line != "") { split = line.find_last_of("."); //parte necessaria name = line.substr(0, split); // per comporre il nome pgm_C += name; // da passare alla pgm_C += ".pgm"; // sift correttamente sift_extract("../siftpp/glx/sift",pgm_C.c_str()); pgm_C = pgm; } pthread_exit(0); } void sift (void) { string line; char st[20]; pthread_t threads[NUM_THREADS]; int rc; int t=0; pthread_mutex_init(&mutexsum, NULL); ifstream in("../output_ls"); while ( in.good() ) { t++; getline(in,line); //lettura linea strcpy(st,line.c_str()); rc = pthread_create(&threads[t], NULL, sift_thread, (void*)st); } for (int i=0; i<t; i++) { pthread_join(threads[i], NULL); } }
è un codice un pò improvvisato con nomi di variabile ancora molto "fantasiosi" per brutta abitudine faccio pulizia del codice quasi sempre verso la fine
spero comunque di essermi spiegato.
grazie!
Saluti
Riccardo
p.s: non capisco come mai mi da presumibilmente codice Delphi
Ultima modifica effettuata da 2_rici 06/01/11 19:33
aaa