Hoihoi,
Voor school moeten we een scriptje schrijven dat het aantal bytewaarde 0x42 telt in enkele bestanden. De voorwaarde van dit scriptje is dat het gebruik moet maken van (meerdere) threads.
Voor windows is hier leuk de klasse thread voor. Voor Linux ook, mits C++11. Echter begon eclipse hier constant over te zeuren, dat ik toch maar via pthreads ben gaan werken. Helaas krijg ik hier ook weer een foutmelding. Namelijk de wel-zo-bekende 'Undefined reference'.
Enkele dingen die ik heb gedaan en noemenswaardig zijn:
Ik maak enkele threads aan, met als parameter van de routine een string* met de bestandslocatie. De routine wordt (ofja, is de bedoeling) dan aangeroepen en maakt gebruik van een functie om de bytes te tellen. Deze returnt een integer die hem weer netjes uitprint in mijn console. Als een van de threads klaar is, wordt deze herladen met een ander filepath, totdat er geen filepaths meer in de vector zitten.
Hier zit ik echter al 2 dagen in vast. De eerste 3 pagina's van Google hebben me helaas niet kunnen helpen. Ik hoop dat we hier op GoT aan 1 pagina genoeg hebben.
Voor school moeten we een scriptje schrijven dat het aantal bytewaarde 0x42 telt in enkele bestanden. De voorwaarde van dit scriptje is dat het gebruik moet maken van (meerdere) threads.
Voor windows is hier leuk de klasse thread voor. Voor Linux ook, mits C++11. Echter begon eclipse hier constant over te zeuren, dat ik toch maar via pthreads ben gaan werken. Helaas krijg ik hier ook weer een foutmelding. Namelijk de wel-zo-bekende 'Undefined reference'.
Enkele dingen die ik heb gedaan en noemenswaardig zijn:
- Bovenaan mijn code staat netjes #include <pthread.h>
- In eclipse heb ik bij project propeties de flags veranderd, zowel met -lp, -lpthread en -pthread
- Code opnieuw geschreven
Ik maak enkele threads aan, met als parameter van de routine een string* met de bestandslocatie. De routine wordt (ofja, is de bedoeling) dan aangeroepen en maakt gebruik van een functie om de bytes te tellen. Deze returnt een integer die hem weer netjes uitprint in mijn console. Als een van de threads klaar is, wordt deze herladen met een ander filepath, totdat er geen filepaths meer in de vector zitten.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
| void* search42(void *filepath); pthread_t threads[10]; Filereader foo; std::vector<string> bar = foo.getFiles(path.c_str()); for(char counter = 0; counter< 10; counter++) { if(!pthread_create(&threads[counter], NULL, search42, &bar.at(counter))) { cout << "yay"; } } |
Hier zit ik echter al 2 dagen in vast. De eerste 3 pagina's van Google hebben me helaas niet kunnen helpen. Ik hoop dat we hier op GoT aan 1 pagina genoeg hebben.