Сообщение Re[2]: В STL почему нет аналога Event Objects(Win32) от 26.02.2015 10:27
Изменено 26.02.2015 11:55 Videoman
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, PowerUserX, Вы писали:
CS>Наверное потому что такой примитив добавить тривиально можно, как-то так:
CS>
CS>wait(chrono::duration) добавить по вкусу.
Абсолюьно неправильная реализация :
Во первых wait может сработать просто так (фантомные просыпания).
Во вторых если один поток сделает notify_one а второй не будет сидеть в этот момент на wait, то событие уйдет в небытие. О нем никто некогда не узнает.
CS>Здравствуйте, PowerUserX, Вы писали:
CS>Наверное потому что такой примитив добавить тривиально можно, как-то так:
CS>
CS> class event
CS> {
CS> event( const event& ) = delete;
CS> event& operator=(const event&) = delete;
CS> std::condition_variable_any _var;
CS> std::mutex _mtx;
CS> public:
CS> event() {}
CS> void signal() {
CS> _var.notify_one();
CS> }
CS> void wait() {
CS> std::unique_lock<std::mutex> lock(_mtx);
CS> _var.wait(lock);
CS> }
CS> };
CS>
CS>wait(chrono::duration) добавить по вкусу.
Абсолюьно неправильная реализация :
Во первых wait может сработать просто так (фантомные просыпания).
Во вторых если один поток сделает notify_one а второй не будет сидеть в этот момент на wait, то событие уйдет в небытие. О нем никто некогда не узнает.
Re[2]: В STL почему нет аналога Event Objects(Win32)
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, PowerUserX, Вы писали:
CS>Наверное потому что такой примитив добавить тривиально можно, как-то так:
CS>
CS>wait(chrono::duration) добавить по вкусу.
Абсолюьно неправильная реализация :
Во-первых, wait может сработать просто так (фантомные просыпания).
Во-вторых, если один поток сделает notify_one а второй не будет сидеть в этот момент на wait, то событие уйдет в небытие. О нем никто никогда не узнает.
CS>Здравствуйте, PowerUserX, Вы писали:
CS>Наверное потому что такой примитив добавить тривиально можно, как-то так:
CS>
CS> class event
CS> {
CS> event( const event& ) = delete;
CS> event& operator=(const event&) = delete;
CS> std::condition_variable_any _var;
CS> std::mutex _mtx;
CS> public:
CS> event() {}
CS> void signal() {
CS> _var.notify_one();
CS> }
CS> void wait() {
CS> std::unique_lock<std::mutex> lock(_mtx);
CS> _var.wait(lock);
CS> }
CS> };
CS>
CS>wait(chrono::duration) добавить по вкусу.
Абсолюьно неправильная реализация :
Во-первых, wait может сработать просто так (фантомные просыпания).
Во-вторых, если один поток сделает notify_one а второй не будет сидеть в этот момент на wait, то событие уйдет в небытие. О нем никто никогда не узнает.