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

Создание параллельных задач - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Оптимизация обработки массивов http://www.cyberforum.ru/cpp-beginners/thread776600.html
Есть 12 числовых массивов (a,b,d,e,f,g,h,k,m,n,p,r) разной длины, их длина кратна 5 и заранее известна. Необходимо создать массив (abdefghkmnpr) состоящий из перебора этих массивов. Алгоритм программы такой: 1 объявляем новый массив(ab) 2 сравниваем два первых массива(a и b) сравнение происходит так: берем 5 элементов массива (b) и по одному сравниваем с 5 элементами массива (a) если в...
C++ Cтруктура: расчет количества библиотек на 1000 жителей. Составить программу, в которой описывается структура из полей: Город, Количество жителей, Количество библиотек. Организовать ввод структурных переменных, вывод каждой структуры на экран и расчет количества библиотек на 1000 жителей. Кол-во библиотек на 1000 жителей = Количество библиотек / Количество жителей / 1000. #include <iostream> #include <cstring> #include <windows.h> #include... http://www.cyberforum.ru/cpp-beginners/thread776581.html
Реализация работы с динамическими структурами C++
Составьте программу, которая создает стек из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого элемента: печать целых чисел из информационной части и остатка от деления первого целого числа на второе.
Структура: Очередь C++
Составьте программу, которая создает очередь из произвольного количества элементов. Информационная часть динамического элемента должна состоять из двух целых чисел. Организуйте обработку каждого элемента: печать целых чисел из информационной части и их среднее значение.
C++ Static поля класса http://www.cyberforum.ru/cpp-beginners/thread776562.html
объясните нубу, вот имею я такой код на С# class WebResponse { public static string GET(string Url, string Data) { string Out = sr.ReadToEnd(); return Out; } } и я просто буду обращаться к этой функции WebResponse.GET(...);
C++ Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения Составить программу, в которой описывается структура из полей: Фамилия, Номер телефона, Год рождения. Организовать ввод двух структурных переменных, вывод каждой структуры на экран и вывести на экран фамилию человека, номер телефона введен с клавиатуры (если такого человека нет, вывести сообщение об этом). подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.02.2013, 13:43     Создание параллельных задач
Мой gcc косячный, wait_for должен возвращать future_status, а не bool.
+ все можно сделать красивше, но как пример пойдет.

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
#include <iostream>
#include <thread>
#include <future>
#include <vector>
#include <algorithm>
 
std::pair<int, int> func(const std::pair<int, int>& p)
{
   return p.first < 3 ? std::make_pair(1, 1) : std::make_pair(func(std::make_pair(p.first - 1, p.second)).first + 
      func(std::make_pair(p.first - 2, p.second)).first, p.second);
}
 
int main()
{
   const int number = 5;
   const int max = 20;
   std::vector<std::future<std::pair<int, int>>> futures(std::max(std::thread::hardware_concurrency(), 6u));
   auto find_ready = [](std::future<std::pair<int, int>>& fut) -> bool
   {
      auto status = fut.wait_for(std::chrono::milliseconds(1));
      return status == true;
   };
   int num = number;
   for (auto& fut : futures)
   {
      fut = std::async(std::launch::async, func, std::make_pair(num, num));
      ++num;
   }
   for (int i = num; i < max;)
   {
      auto it = std::find_if(futures.begin(), futures.end(), find_ready);
      if (it == futures.end())
      {
         continue;
      }
      auto res = it->get();
      std::cout << "Number: " << res.second << " result: " << res.first << std::endl;
      *it = std::async(std::launch::async, func, std::make_pair(i, i));
      std::cout << "Start new future for: " << i << std::endl;
      ++i;
   }
   std::cout << "Get results from rest futures" << std::endl;
   for (auto& fut : futures)
   {
      auto res = fut.get();
      std::cout << "Number: " << res.second << " result: " << res.first << std::endl;
   }
}
Код тот же, однако подсчет от 20 до 40.

forever@pterois:~/My_pro1/cpp_pro$ ./new.exe
Number: 20 result: 6765
Start new future for: 26
Number: 21 result: 10946
Start new future for: 27
Number: 22 result: 17711
Start new future for: 28
Number: 23 result: 28657
Start new future for: 29
Number: 24 result: 46368
Start new future for: 30
Number: 25 result: 75025
Start new future for: 31
Number: 26 result: 121393
Start new future for: 32
Number: 27 result: 196418
Start new future for: 33
Number: 28 result: 317811
Start new future for: 34
Number: 29 result: 514229
Start new future for: 35
Number: 30 result: 832040
Start new future for: 36
Number: 31 result: 1346269
Start new future for: 37
Number: 32 result: 2178309
Start new future for: 38
Number: 33 result: 3524578
Start new future for: 39
Get results from rest futures
Number: 38 result: 39088169
Number: 39 result: 63245986
Number: 34 result: 5702887
Number: 35 result: 9227465
Number: 36 result: 14930352
Number: 37 result: 24157817
 
Текущее время: 11:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru