Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- typedef struct {
- pthread_t thread;
- char* fileName;
- } ArgumentStruct;
- static void* ProcessFile(void* _arg) {
- ArgumentStruct* arg = (ArgumentStruct*)_arg;
- FILE* f = fopen(arg->fileName, "r");
- if (!f)
- return NULL;
- //Считывание данных из файла.
- fclose(f);
- //Обработка данных (вычисление интеграла/максимума/etc).
- //Обратите внимание: здесь может быть не более одной команды вывода (printf)!
- //В противном случае вывод из разных потоков может пойти вперемешку.
- //Если одной команды не хватает, в структуре необходимо завести нужные поля
- //и задавать их здесь, а выводить в main.
- return NULL;
- }
- int main(int argc, char* argv[ ]) {
- if (argc == 1) {
- fputs("Missing command line arguments!\n", stderr);
- return 1;
- }
- size_t threadCount = argc - 1;
- size_t i;
- ArgumentStruct* structObjects = (ArgumentStruct*)malloc(threadCount * sizeof(ArgumentStruct));
- for (i = 0; i < threadCount; i++) {
- //Здесь мы через структуру передаем функции всю информацию, которую ей следует знать.
- structObjects[i].fileName = argv[i + 1];
- pthread_create(&structObjects[i].thread, NULL, ProcessFile, &structObjects[i]);
- }
- for (i = 0; i < threadCount; i++) {
- pthread_join(structObjects[i].thread, NULL);
- //Если мы ожидаем, что ProcessFile изменит переданную структуру
- //(например, запишет в нее ответ), сейчас - самое время этот ответ вывести.
- }
- free(structObjects);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement