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

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

Восстановить пароль Регистрация
 
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 467
Завершенные тесты: 1
21.06.2014, 00:07     Поток с бесконечным циклом #1
Добрый вечер всем.
Пишу простенькую игру, появилась необходмость в дополнительном потоке. Как не крутил поставленную задачу над игрой, прихожу к одному - бесконечный цикл в точке входа(функции) в поток.
Где-то читал,что нежелательно делать бесконечные циклы в функции потока,и лучше всего сделать так,чтобы она завершалась самостоятельно...но что делать, что если по другому задачу не реализовать? Немного переформулирую свою фразу : что если по другому задачу не реализовать НА МОЙ ВЗГЛЯД?

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

с циклом for C++
Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. C++
Пытаюсь переписать код с циклом for, в код с циклом while, но не совсем получается C++
Скопировать поток и добавить ошибки в поток C++
C++ В какой среде лучше писать крестики-нолики с бесконечным полем?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2014, 00:38     Поток с бесконечным циклом #2
ваш взгляд есть, а поставленная задача где?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.06.2014, 00:50     Поток с бесконечным циклом #3
Цитата Сообщение от Bretbas Посмотреть сообщение
И как кстати мне завершить этот поток,кроме как выход из программы?
Как завершить бесконечный цикл в потоке? Отслеживать значение какой-либо переменной, которую можно изменять в основном потоке, отслеживать события (нажатие клавиш и пр.).
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.06.2014, 02:44     Поток с бесконечным циклом #4
Ждать с помощью condition_variable в цикле и прервать его когда придет оповещение для condition_variable.
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 467
Завершенные тесты: 1
22.06.2014, 00:07  [ТС]     Поток с бесконечным циклом #5
у меня в любом исходе остается бесконечный цикл. Это слишком нежелательно, или все-таки можно иногда так делать?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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;
}
Yandex
Объявления
22.06.2014, 00:29     Поток с бесконечным циклом
Ответ Создать тему
Опции темы

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