Форум программистов, компьютерный форум, киберфорум
Наши страницы

Некорректная работа условных переменных в приведенном коде - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В файл записывается мусор. Подкорректировать код http://www.cyberforum.ru/cpp-beginners/thread1085876.html
Нужна помощь! В общем организована БД со структурами и целый перечень функций, которые её обслуживают. Всё работало, но что как-то пошло не так и теперь некорректно работает 4-ая функция: "Edit...
C++ Лишняя скобка? Ругается на строку str = L"всё"; Так- error C2059: синтаксическая ошибка: ] \wchar\wchar\wchar.cpp 11 #include <iostream> #include "Vjnkak.cpp" int main() { int baitovwchar_t =... http://www.cyberforum.ru/cpp-beginners/thread1085874.html
C++ численное решения уравнения фредгольма второго рода
Подскажите,обсуждалось ли на форуме численное решение уравнения фредгольма второго рода?может у кого есть реализация метода последовательных приближений на си?
Используя интерполяционную формулу Ньютона, вычислить значение функции при заданных значениях аргумента с точностью до 0.001 C++
Нужно написать програму которая будит используя интерполяционную формулу Ньютона вычеслять значение функции. Задание: Значение аргумента: х1=1.4161; x2=1.4625; x3=1.4135; x4=1.470. Таблица...
C++ Вывести на экраны все книги указанного автора http://www.cyberforum.ru/cpp-beginners/thread1085864.html
Дан список, содержащий данные о книгах - фамилия автора и название книги. Вывести на экраны все книги указанного автора. Помогите, хотя бы пример напишите
C++ Обращение к классу в статической библиотеке из консольного приложения. С++ По условию в решении 2 проекта: статическая библиотека и консольное приложение. В статической библиотеке я прописал класс Queue т.е. все его методы и его класс-наследователь Queue1. Мне нужно... подробнее

Показать сообщение отдельно
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
06.02.2014, 02:30
Цитата Сообщение от Bretbas Посмотреть сообщение
3.Может здесь вовсе не нужны условные переменные,и можно реализовать данную систему как-то подругому?
Назначение std::condition_variable ожидать изменения некоего состояния. Он не спроектирован для того, чтобы быть просто получателем некоторого сообщения. Ты можешь использовать его, например, когда поток потребитель должен ожидать, пока в очереди появятся сообщения:
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
Event get_from_queue()
{
    std::unique_lock l(queue_mutex);
    while(event_queue.empty())
    {
        queue_condition.wait(l);
    }
    Event event = event_queue.top();
    event_queue.pop();
    return event;
}
 
void thread()
{
    while(true)
    {
        Event e = get_from_queue();
 
        //обработка события выхода
        if(e->type() == Event::ThreadExit)
        {
            break;
        }
        //обработка остальных событий
        process_event(e);
    }
}
В твоем случае, когда нужно послать потоку выполняющему длительную операцию сигнал о завершении, естественно нельзя использовать terminate, потому что ты потеряешь всю память, которая была у потока и деструкторы объектов внутри потока не будут вызваны. Самый просто способ решить проблему, это завести булевскую переменную, защитить ее изменение мьютексом, в цикле передвижения фигуры вставить проверку этой переменной (естественно тоже с мьютексом), если переменная true, то выйти из цикла. Если операция очень длительная, можно разбить ее на условные подоперации и проверять такую переменную в каждой из них.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru