Advertisement
SirNickolas

OS 4

Oct 28th, 2014
506
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4.  
  5. typedef struct {
  6.     pthread_t thread;
  7.     char* fileName;
  8. } ArgumentStruct;
  9.  
  10. static void* ProcessFile(void* _arg) {
  11.     ArgumentStruct* arg = (ArgumentStruct*)_arg;
  12.     FILE* f = fopen(arg->fileName, "r");
  13.     if (!f)
  14.         return NULL;
  15.     //Считывание данных из файла.
  16.     fclose(f);
  17.     //Обработка данных (вычисление интеграла/максимума/etc).
  18.     //Обратите внимание: здесь может быть не более одной команды вывода (printf)!
  19.     //В противном случае вывод из разных потоков может пойти вперемешку.
  20.     //Если одной команды не хватает, в структуре необходимо завести нужные поля
  21.     //и задавать их здесь, а выводить в main.
  22.     return NULL;
  23. }
  24.  
  25. int main(int argc, char* argv[ ]) {
  26.     if (argc == 1) {
  27.         fputs("Missing command line arguments!\n", stderr);
  28.         return 1;
  29.     }
  30.     size_t threadCount = argc - 1;
  31.     size_t i;
  32.     ArgumentStruct* structObjects = (ArgumentStruct*)malloc(threadCount * sizeof(ArgumentStruct));
  33.     for (i = 0; i < threadCount; i++) {
  34.         //Здесь мы через структуру передаем функции всю информацию, которую ей следует знать.
  35.         structObjects[i].fileName = argv[i + 1];
  36.         pthread_create(&structObjects[i].thread, NULL, ProcessFile, &structObjects[i]);
  37.     }
  38.     for (i = 0; i < threadCount; i++) {
  39.         pthread_join(structObjects[i].thread, NULL);
  40.         //Если мы ожидаем, что ProcessFile изменит переданную структуру
  41.         //(например, запишет в нее ответ), сейчас - самое время этот ответ вывести.
  42.     }
  43.     free(structObjects);
  44.     return 0;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement