std::condition_variable с данными
От: Volopass  
Дата: 06.07.19 03:14
Оценка:
нужно кидать event с данными.
хорошо бы примерчик на основе std::condition_variable.
Re: std::condition_variable с данными
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.07.19 08:58
Оценка:
добавь мапу, сабж предоставляет native_handle()
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: std::condition_variable с данными
От: Volopass  
Дата: 07.07.19 23:05
Оценка:
Здравствуйте, niXman, Вы писали:

X>добавь мапу, сабж предоставляет native_handle()

пример можно? уже лет 10 не использовал С++ ...
Re[3]: std::condition_variable с данными
От: a7d3  
Дата: 07.07.19 23:35
Оценка:
Здравствуйте, Volopass, Вы писали:

V>Здравствуйте, niXman, Вы писали:

X>>добавь мапу, сабж предоставляет native_handle()

V>пример можно? уже лет 10 не использовал С++ ...

Видимо, имеется в виду метод std::condition_variable::native_handle
Вообще, на том ресурсе полно примеров, вроде того что внизу страницы https://en.cppreference.com/w/cpp/thread/condition_variable
Очень полезно жать на кнопочку «Run this code» — откроется онлайн-редактор с возможность выбирать компилятор.

Раз десять лет, то из самого неочевидного с многопоточкой — нужно все треды джойнить, если не было детача.
Пример из книжки «CPP Concurrency in Action» Williams A.
class thread_guard
{
    std::thread& t;

public:
    explicit thread_guard(std::thread& t_) : t(t_){}

    ~thread_guard()
    {
        if(t.joinable())
        {
            t.join();
        }
    }

    thread_guard(thread_guard const&)=delete;
    thread_guard& operator=(thread_guard const&)=delete;
};

struct func;

void f()
{
    int some_local_state=0;
    func my_func(some_local_state);

    std::thread t(my_func);

    thread_guard g(t);

    do_something_in_current_thread();
}

Либо так, либо детачить:

If you don’t need to wait for a thread to finish, you can avoid this exception-safety
issue by detaching it. This breaks the association of the thread with the std::thread object
and ensures that std::terminate() won’t be called when the std::thread object is
destroyed, even though the thread is still running in the background.


Не за что.
Re: std::condition_variable с данными
От: Chorkov Россия  
Дата: 08.07.19 09:39
Оценка: 1 (1) +1
Здравствуйте, Volopass, Вы писали:

V>нужно кидать event с данными.

V>хорошо бы примерчик на основе std::condition_variable.

std::future и есть суть данные + событие (однократное).
Для того чтобы бросить такое событие нужен std::promise.
Пример: https://en.cppreference.com/w/cpp/thread/promise
std::condition_variable под капотом и для использования напрямую, в сценарии посылки данных, больше не нужны.
Отредактировано 08.07.2019 10:50 Chorkov . Предыдущая версия .
Re: std::condition_variable с данными
От: so5team https://stiffstream.com
Дата: 08.07.19 11:37
Оценка:
Здравствуйте, Volopass, Вы писали:

V>нужно кидать event с данными.

V>хорошо бы примерчик на основе std::condition_variable.

Может вам проще взять какую-нибудь готовую thread-safe message-queue и не заниматься её реализацией самостоятельно?
Re: std::condition_variable с данными
От: B0FEE664  
Дата: 08.07.19 14:09
Оценка:
Здравствуйте, Volopass, Вы писали:

V>нужно кидать event с данными.

V>хорошо бы примерчик на основе std::condition_variable.

Для того, чтобы написать пример, нужно знать про задачу немного поболее.
1) event с данными должен приходит регулярно или спорадически?
2) обработка данных предполагается последовательно или паралельно?
3) нужно ли соблюдать timout'ы какого либо рода?
4) сколько ниток создают данные: одна или более?
5) сколько ниток обрабатывают данные: одна или более?
6) что важнее: скорость выполнения или удобство чтения/модификации кода?
И каждый день — без права на ошибку...
Re: std::condition_variable с данными
От: reversecode google
Дата: 11.07.19 17:37
Оценка:
Здравствуйте, Volopass, Вы писали:

V>нужно кидать event с данными.

V>хорошо бы примерчик на основе std::condition_variable.

в умных книжках написано что когда нужно сигнализировать, то нужно использовать семафор

кондишин вариабле это про другое
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.