Re[3]: Автопрогресс и автопрерываемость в С++
От: Alexander G Украина  
Дата: 21.03.18 08:52
Оценка: 6 (1)
Здравствуйте, GhostCoders, Вы писали:


AG>>В общем авто-магии не получится. Все проблемы интерапшинов из boost::thread будут.

GC>Не работал с boost.thread. А он, что, поддерживает прерываемость?

boost::thread похож на std::thread (ибо был прототипом std::thread), но имеет расширения, одно из — интеррапшин поинты.

Любая точка прерывания бросает thread_interrupted исключение, если поток прервали.
Точками прерывания являются явные вызовы interruption_point.
Кроме того, некоторые ожидания: sleep, условной переменной, join — всё является точками прерывания.
То есть, если поток сейчас ждёт мьютекс ждёт на условной переменной, и его прервали, он вылетит тут же.
Разумеется, работает только с примитивами из boost, в них заложено ожидание на событии прерывания одновременно с основным ожиданием.

Для борьбы с исключениями в деструкторах создают на стеке disable_interruption.

Для борьбы с борьбой с исключениями создают на стеке restore_interruption.

thread_interrupted исключение целенаправленно не наследуется от std::exception, чтобы оно прошло через все catch(std::exception&) и завершило thread.

Но если в треде есть catch(...), то он съест thread_interrupted исключение, и вместо полного прерывания нити будет просто раскрутка до этого catch(...)


GC>То есть, я думаю что это нельзя сделать в compile-time при помощи одного С++. Только расширение, основанное на Clang писать?


На данный момент нет, вроде ничего такого нет.
Может, препроцессором?

Были пропозл по метаклассам, должен решать кодогенерационные задачи.

Для кодогенерации не привязанной к конкретному классу там были namespace class. My namespace — my rules

Только не факт, что зайдёт, и что он в финале будет достаточно упорот, чтобы не просто генерировать методы, а изменять существующие методы.
Русский военный корабль идёт ко дну!
Отредактировано 21.03.2018 9:36 Alexander G . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.