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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bretbas
191 / 50 / 7
Регистрация: 05.08.2013
Сообщений: 823
Завершенные тесты: 1
#1

Поток с бесконечным циклом - C++

21.06.2014, 00:07. Просмотров 435. Ответов 5
Метки нет (Все метки)

Добрый вечер всем.
Пишу простенькую игру, появилась необходмость в дополнительном потоке. Как не крутил поставленную задачу над игрой, прихожу к одному - бесконечный цикл в точке входа(функции) в поток.
Где-то читал,что нежелательно делать бесконечные циклы в функции потока,и лучше всего сделать так,чтобы она завершалась самостоятельно...но что делать, что если по другому задачу не реализовать? Немного переформулирую свою фразу : что если по другому задачу не реализовать НА МОЙ ВЗГЛЯД?

И как кстати мне завершить этот поток,кроме как выход из программы?
Подскажите плизз)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2014, 00:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поток с бесконечным циклом (C++):

цикл for стал бесконечным? - C++
В общем, по заданию дано матрицу, для неё надо просуммировать все элементы столбцов и вывести строку сумм. И так надо сделать для двух...

В какой среде лучше писать крестики-нолики с бесконечным полем? - C++
я умею писать консольные приложки на с++ в висуал студио мне нужно написать крестики-нолики на бесконечном поле чтобы Вы мне...

Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается - C++
Возникло пару вопросов: #include <iostream> using namespace std; int main () { for (int i = 0; i<=10; i++) cout <<...

написать программу вычисления функции представленной бесконечным рядом чисел с точностью е=0.0001 - C++
составить программу которая расчитывает таблицу значений функции в указанном диапазоне чисел х0-хКонеч. с заданным шагом h . величины h,...

Скопировать поток и добавить ошибки в поток - C++
Здорова господа! Есть задачка: "Скопируйте поток объектов типа Name_and_address и вставьте в него столько ошибок, сколько сколько...

Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. - C++
Совсем не понял эту тему. Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2014, 00:38 #2
ваш взгляд есть, а поставленная задача где?
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.06.2014, 00:50 #3
Цитата Сообщение от Bretbas Посмотреть сообщение
И как кстати мне завершить этот поток,кроме как выход из программы?
Как завершить бесконечный цикл в потоке? Отслеживать значение какой-либо переменной, которую можно изменять в основном потоке, отслеживать события (нажатие клавиш и пр.).
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.06.2014, 02:44 #4
Ждать с помощью condition_variable в цикле и прервать его когда придет оповещение для condition_variable.
Bretbas
191 / 50 / 7
Регистрация: 05.08.2013
Сообщений: 823
Завершенные тесты: 1
22.06.2014, 00:07  [ТС] #5
у меня в любом исходе остается бесконечный цикл. Это слишком нежелательно, или все-таки можно иногда так делать?
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.06.2014, 00:29 #6
Цитата Сообщение от Bretbas Посмотреть сообщение
у меня в любом исходе остается бесконечный цикл. Это слишком нежелательно, или все-таки можно иногда так делать?
Вопрос не до конца понял. Что именно не желательно?
Попробую дать вот такой пример:
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
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <atomic>
#include <chrono>
 
std::condition_variable cv;
std::mutex cv_m;
std::atomic<int> flag{0};
 
void waits() {
    std::unique_lock<std::mutex> locker(cv_m);
    while(true) {
        if (!cv.wait_for(locker, std::chrono::milliseconds(10), []{return flag == 1;}))
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(400));
            std::cout << "Working into waits()...\n";
        }
        else {
            std::cout << "Work into waits() DONE!\n";
            break;
        }
    }
}
 
void do_something_else() {
    for (int i = 0; i < 10; ++i) {
        std::cout << "Work into do_something_else()...\n";
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
    flag = 1;
    cv.notify_one();
}
 
int main()
{
    std::thread t(waits);
    do_something_else();
    t.join();
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2014, 00:29
Привет! Вот еще темы с ответами:

Скопировать поток в поток - C++
Есть ли возможность скопировать один поток в другой. Например int main() { ofstream (*P) = new ofstream; ofstream...

Последовательность.. с циклом do .. while - C++
Очень жесткое задание. вообще не могу понять как делать. Вычислить и вывести те члены последовательности, (x^3)/3, ...

Программа с циклом - C++
# include &lt;iostream&gt; # include &lt;iomanip&gt; # include &lt;cmath&gt; # include &lt;conio.h&gt; int main() {using namespace std; float x, xn,...

Задача с циклом - C++
Здравствуйте. Начал осваивать язык С++. Возникла трудность с корректной записью логики задачи. Хочу услышать Ваши советы. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.06.2014, 00:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru