Я разрабатываю библиотеку C ++, которая позволит мне установить значение для POD только один раз (что -то аналогичное с окончательным ключевым словом Flutter < /code>.
в моем приложении это несколько конфигурации, которые являются Установка только один раз (во время инициализации) и оставаться действительным в течение жизни программы.
Я использую std :: one < /code> и std :: call_once < /code> для то же самое.
Я нажимал на схватку, за которой я не могу проверить, был ли выполнен std :: call_once < /code>.
я подумал о добавлении std :: atomic_bool < /code> для отслеживания состояния std :: call_once < /code>.
мне было интересно, является ли они лучшей альтернативой, чем логический флаг, где я могу использовать что -то связанное std :: oney_flag объект для получения состояния std :: call_once выполнение.
код:
#pragma once
#include
class DataNotSetException: public std::exception
{
public:
const char* message = "Data Not Set before Get Operation";
char* what()
{
return const_cast(this->message);
}
};
template
class SetOnce
{
private:
T data;
std::once_flag flag;
void do_once(const T& data);
public:
T get(void) const;
void set(const T& data);
bool is_set(void) const;
};
template
inline void SetOnce::do_once(const T& data)
{
this->data = data;
}
//If data is not been set throw data not set exception (DataNotSetException)
template
inline T SetOnce::get(void) const
{
if (this->is_set() == true)
{
return this->data;
}
else
{
throw DataNotSetException();
}
}
template
inline void SetOnce::set(const T& data)
{
std::call_once(this->flag, this->do_once, data);
}
template
inline bool SetOnce::is_set(void) const
{
//How to check if the call_once has been executed
}
< /code>
Редактировать < /p>
Я работаю над системой в реальном времени и, следовательно, хочу избежать задержки связанной блокировки ( Занят wait) MUTEX вызовы при работе < /code>.
Ожидается, что операция GET будет иметь низкое время отклика и высокая частота выполнения. < /p>
Подробнее здесь: https://stackoverflow.com/questions/768 ... n-executed
Получить статус, если std :: call_once был выполнен? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1740486796
Anonymous
Я разрабатываю библиотеку C ++, которая позволит мне установить значение для POD только один раз (что -то аналогичное с окончательным ключевым словом Flutter < /code>.
в моем приложении это несколько конфигурации, которые являются Установка только один раз (во время инициализации) и оставаться действительным в течение жизни программы.
Я использую std :: one < /code> и std :: call_once < /code> для то же самое.
Я нажимал на схватку, за которой я не могу проверить, был ли выполнен std :: call_once < /code>.
я подумал о добавлении std :: atomic_bool < /code> для отслеживания состояния std :: call_once < /code>.
мне было интересно, является ли они лучшей альтернативой, чем логический флаг, где я могу использовать что -то связанное std :: oney_flag объект для получения состояния std :: call_once выполнение.
код:
#pragma once
#include
class DataNotSetException: public std::exception
{
public:
const char* message = "Data Not Set before Get Operation";
char* what()
{
return const_cast(this->message);
}
};
template
class SetOnce
{
private:
T data;
std::once_flag flag;
void do_once(const T& data);
public:
T get(void) const;
void set(const T& data);
bool is_set(void) const;
};
template
inline void SetOnce::do_once(const T& data)
{
this->data = data;
}
//If data is not been set throw data not set exception (DataNotSetException)
template
inline T SetOnce::get(void) const
{
if (this->is_set() == true)
{
return this->data;
}
else
{
throw DataNotSetException();
}
}
template
inline void SetOnce::set(const T& data)
{
std::call_once(this->flag, this->do_once, data);
}
template
inline bool SetOnce::is_set(void) const
{
//How to check if the call_once has been executed
}
< /code>
Редактировать < /p>
Я работаю над системой в реальном времени и, следовательно, хочу избежать задержки связанной блокировки ( Занят wait) MUTEX вызовы при работе < /code>.
Ожидается, что операция GET будет иметь низкое время отклика и высокая частота выполнения. < /p>
Подробнее здесь: [url]https://stackoverflow.com/questions/76850406/get-status-if-stdcall-once-has-been-executed[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия