Форум программистов, компьютерный форум CyberForum.ru

Параллельная обработка - C++

Восстановить пароль Регистрация
 
Fallenworld
75 / 75 / 9
Регистрация: 14.04.2014
Сообщений: 408
15.04.2014, 16:07     Параллельная обработка #1
Добрый день!

Подскажите, пожалуйста, как параллельно считать содержимое всех файлов из директории?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 16:07     Параллельная обработка
Посмотрите здесь:

C++ Параллельная работа с документами
Параллельная прямая C++
C++ обработка символов
C++ Параллельная реализация алгоритма Дейкстры
C++ Параллельная работа лифтов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
15.04.2014, 17:09     Параллельная обработка #2
Ну, к примеру так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <boost/filesystem.hpp>
#include <future>
 
namespace fs = boost::filesystem;
 
template <typename T>
std::vector<T> reed_file(const std::string& filename) {
   using input = std::istream_iterator<T>;
   std::ifstream ifs(filename);
   if (!ifs.is_open()) return {};
   std::vector<T> data {input(ifs), input()};
   return data;
}
 
std::vector<fs::path> getFiles(const std::string& directoryName)
{
   std::vector<fs::path> res;
   for ( fs::directory_iterator it(directoryName), end; it != end; ++it)
   {
      try
      {
         if ( fs::is_regular_file(*it ) )
            res.push_back(*it);
         else if (fs::is_directory(*it) && !fs::is_symlink(*it) )
         {
            const std::vector<fs::path>& subDirectory = getFiles( it->path().generic_string() );
            std::copy(subDirectory.begin(), subDirectory.end(), std::back_inserter(res) );
         }
      }
      catch(const fs::filesystem_error& ex) { }
   }
   return res;
}
 
int main()
{
   const std::string mydirectory = "D:\\Temp";
   std::vector<fs::path> files(getFiles(mydirectory));
 
   std::vector<std::future<std::vector<double>>> futures;
   for (auto& filename : files)
       futures.emplace_back(std::async(reed_file<double>, filename.generic_string()));
 
   int i = 0;
   for (auto& f : futures) {
      std::cout << "file #" << ++i << "\n";
      for (auto& data : f.get())
         std::cout << data << " ";
      std::cout << "\n";
   }
 
   return 0;
}
Fallenworld
75 / 75 / 9
Регистрация: 14.04.2014
Сообщений: 408
15.04.2014, 20:41  [ТС]     Параллельная обработка #3
При компиляции выдает ошибку
C++
1
1>LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc120-mt-gd-1_55.lib'
newbie666
Заблокирован
15.04.2014, 20:49     Параллельная обработка #4
ну а boost то у тебя е?
Fallenworld
75 / 75 / 9
Регистрация: 14.04.2014
Сообщений: 408
15.04.2014, 20:51  [ТС]     Параллельная обработка #5
Я скачал архив с офф сайта boost.org, распаковал его, вроде бы откомпилировал с помощью bjam, и указал путь в линкере и в компиляторе...
newbie666
Заблокирован
15.04.2014, 20:58     Параллельная обработка #6
ну так найди файл 'libboost_filesystem-vc120-mt-gd-1_55.lib'
и положи куда надо.
А ещё учти что судя по названию этот файл для сборки MultiThreaded Debug
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2014, 21:27     Параллельная обработка
Еще ссылки по теме:

C++ Параллельная сортировка, протестировать алгоритм
C++ Параллельная обработка файлов
Параллельная работа с файлами C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Fallenworld
75 / 75 / 9
Регистрация: 14.04.2014
Сообщений: 408
15.04.2014, 21:27  [ТС]     Параллельная обработка #7
Все, спасибо, разобрался, у меня был случайно нетот путь в либах указан.

П.С. сборка естественно мултисредед, так как суть кода в параллельной обработке.
Yandex
Объявления
15.04.2014, 21:27     Параллельная обработка
Ответ Создать тему
Опции темы

Текущее время: 23:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru