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

Запуск нескольких независимых потоков. Дождаться завершения всех (C++ 11) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти количество элементов массива, удовлетворяющих условию 1<b[i]<m http://www.cyberforum.ru/cpp-beginners/thread1221618.html
В массиве b(25), сформированном случайным образом, найти количество элементов, удовлетворяющих условию 1<b<m, где 1 и m - заданные числа.
C++ Заменить элементы побочной диагонали на минимальное значение матрицы В матрице А, сформированной случайным образом, заменить элементы побочной диагонали на минимальное значение матрицы. http://www.cyberforum.ru/cpp-beginners/thread1221616.html
Почему не работает gotoxy () C++
Уважаемые форумчане пытаюсь разобраться с "gotoxy ()", нашел такой вот пример: #include <conio.h> int main(void) { clrscr(); gotoxy(35,12); cprintf("Привет!"); getch();
Найти наибольший элемент среди стоящих на главной и побочной диагоналях матрицы C++
Задать матрицу A(n Ч n),элементы которой различны. Найти наибольший элемент среди стоящих на главной и побочной диагоналях, и поменять его местами с элементом, стоящим на пересечении этих диагоналей.
C++ Посчитать среднее арифметическое элементов массива с помощью функции http://www.cyberforum.ru/cpp-beginners/thread1221545.html
Программа такая: вводится 10 элементов массива, и нужно посчитать среднее арифметическое. Нужно чтобы функция, считающая среднее арифметическое была написана отдельно. Я вроде вызвал её, но видимо не правильно. После ввода массива выдает ошибку. Как правильно её вызвать? #include "stdafx.h" #include <iostream> #include <string> using namespace std; int Example1(int a, int b) {
C++ Перевод из Pascal в С++ (вычисление суммы ряда) var x, px, f, s: real; i, n: integer; begin WriteLn('Введите количество суммируемых членов: '); ReadLn(n); WriteLn('Введите x: '); ReadLn(x); x:=sqr(x); px:=1; f:=1; i:=2; s:=1; for n:=n downto 1 do begin px:=px*x; f:=f*(i-1)*(i); s:=s+px/f; i:=i*2; end; подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.07.2014, 13:31     Запуск нескольких независимых потоков. Дождаться завершения всех (C++ 11)
Цитата Сообщение от MastAKK Посмотреть сообщение
Как дождаться завершения всех потоков?
Можно вылавливать на future готовые результаты в цикле. Результаты будем получать в порядку завершения потоков. Вот надуманный пример:
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <future>
#include <thread>
#include <chrono>
 
int main()
{
   using fut_t = std::future<int>;
   std::vector<fut_t> futures;
 
   auto is_future_valid = [](fut_t& fut)
   {
      return fut.valid();
   };
   auto is_future_ready = [&is_future_valid](fut_t& fut)
   {
      return is_future_valid(fut) && fut.wait_for(
               std::chrono::microseconds(100)) == std::future_status::ready;
   };
 
   futures.emplace_back(std::async(std::launch::async, []{
      std::this_thread::sleep_for(std::chrono::seconds(5));
      return 1;
   }));
 
   futures.emplace_back(std::async(std::launch::async, []{
      std::this_thread::sleep_for(std::chrono::seconds(15));
      return 2;
   }));
 
   futures.emplace_back(std::async(std::launch::async, []{
      std::this_thread::sleep_for(std::chrono::seconds(10));
      return 3;
   }));
 
   futures.emplace_back(std::async(std::launch::async, []{
      std::this_thread::sleep_for(std::chrono::seconds(3));
      return 42;
   }));
 
   while (std::any_of(futures.begin(), futures.end(), is_future_valid)) {
      auto next = std::find_if(futures.begin(), futures.end(), is_future_ready);
      if (next == futures.end())
      {
         continue;
      }
 
      std::cout << next->get() << std::endl;
   }
 
   return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от MastAKK Посмотреть сообщение
Как правильно сделать мультипотоковую сортировку?
Вообще, параллельную сортировку очень сложно реализовать. Пример есть в моем блоге.
 
Текущее время: 22:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru