/
memset
/
synchron_data_streams
Обзор
Документация
Войти
/
memset
/
synchron_data_streams
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
queue_pattern.h
96 строк
2 KB
petrova_ms
Добавление файлов в репозиторий
02 июн 2026, 21:05
02 июн 2026, 21:05
b4818d2
Код
Авторство
О чём код?
/** @mainpage @file Заголовочный файл queue_pattern.h @author Петрова М.С. @version @date 2023 @note Описан шаблон класса DataQueue - очередь */ #ifndef QUEUE_PATTREN_H #define QUEUE_PATTREN_H #include "event_sync.h" #include <queue> #include <pthread.h> using namespace std; template <class T> class DataQueue { private: queue <T> queue_data; EventSync eventSync; ///< Событие на поступление сообщения pthread_mutex_t mutex_queue; ///< Мьютех на данные сообщения int status; struct timespec time_wait_sem; public: /// Конструктор DataQueue() { this->time_wait_sem.tv_sec = 60; this->time_wait_sem.tv_nsec = 0; if(pthread_mutex_init(&mutex_queue, 0) != 0) status = -1; else status = 0; } /// Деструкутор ~DataQueue() { if(status != -1) pthread_mutex_destroy(&mutex_queue); } int init_data_queue(struct timespec * time_wait_sem) { this->time_wait_sem.tv_sec = time_wait_sem->tv_sec; this->time_wait_sem.tv_nsec = time_wait_sem->tv_nsec; if(get_status() == -1) return -1; return 0; } int get_status() { status_obj_st st = eventSync.get_status(); if(st.status == -1) status = -1; return status; } /// Метод поместить сообщение /// @param int push_data(T data) { int ret = 0; pthread_mutex_lock(&mutex_queue); queue_data.push(data); ret = eventSync.reset_event(); pthread_mutex_unlock(&mutex_queue); return ret; } /// Метод взять сообщение /// @return int pop_data(T & data) { int ret_event = eventSync.wait_event_time(&time_wait_sem); if(!ret_event) { pthread_mutex_lock(&mutex_queue); if(!queue_data.empty()) { data = queue_data.front(); queue_data.pop(); } else ret_event = -1; pthread_mutex_unlock(&mutex_queue); } return ret_event; } }; #endif // QUEUE_PATTREN_H