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

Future::wait_for не работает - C++

Восстановить пароль Регистрация
 
hamster28
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 41
25.03.2014, 14:59     Future::wait_for не работает #1
скопировал пример с cplusplus.com
запускается. из while не выходит.
компилятор gcc. среда - qt creator, хотя это врят ли важно.

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
// future::wait_for
#include <iostream>       // std::cout
#include <future>         // std::async, std::future
#include <chrono>         // std::chrono::milliseconds
 
// a non-optimized way of checking for prime numbers:
bool is_prime (int x) {
  for (int i=2; i<x; ++i) if (x%i==0) return false;
  return true;
}
 
int main ()
{
  // call function asynchronously:
  std::future<bool> fut = std::async (is_prime,700020007); 
 
  // do something while waiting for function to set future:
  std::cout << "checking, please wait";
  std::chrono::milliseconds span (100);
  while (fut.wait_for(span)==std::future_status::timeout)
    std::cout << '.';
 
  bool x = fut.get();
 
  std::cout << "\n700020007 " << (x?"is":"is not") << " prime.\n";
 
  return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 15:23     Future::wait_for не работает #2
C++
1
while (fut.wait_for(span)==std::future_status::timeout)
скорее всего это условие всегда истинно

Добавлено через 3 минуты
или....Вы недождались завершения операции
hamster28
0 / 0 / 0
Регистрация: 25.07.2012
Сообщений: 41
25.03.2014, 15:29  [ТС]     Future::wait_for не работает #3
тогда возникает вопрос, почему оно истинно и как сделать, чтоб все работало. если я правильно понимаю, то мы просто ждем окончания выполнения функции, проверяя каждые 100 мс.
неужели она никогда не заканчивается? попробовал с малыми числами, све так же висит.
или таймаут как-то не так работает? это ж пример с с++!)
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
25.03.2014, 15:40     Future::wait_for не работает #4
аа я понял в чем дело, async предалагает асинхронную задачу, выполнять ее в отдельном потоке или нет, решает система, и тут видимо решение не запускать в отдельном потоке, попробуйте так

std::future<bool> fut = std::async (std::launch::async, is_prime,700020007);

Добавлено через 2 минуты
если решено не выполнять в отдельном потоке, то выполнение будет производиться, когда будет запрошен результат, но мы не доходим до fut.get()
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.03.2014, 15:40     Future::wait_for не работает #5
Вот тут же дается нормальный наглядный пример: wait_for
Yandex
Объявления
25.03.2014, 15:40     Future::wait_for не работает
Ответ Создать тему
Опции темы

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