понедельник, 2 марта 2015 г.

[prog.flame] И вот в этом случае реализация акторов для C/C++ "ненужно"? ;)

Когда анонсируешь где-нибудь очередной релиз SObjectizer-а, рано или поздно возникает вопрос "а зачем это нужно?" (правда, еще раньше находится какой-нибудь неадекват, который будет кричать "ненужно" в ответ на каждую реплику). В тоже время на глаза регулярно попадаются темы, которые, имхо, наглядно показывают, где именно в C или C++ агентный фреймворк вроде SObjectizer или CAF мог бы пригодиться.

Вот, например, две свежие темы с LOR-а от одного и того же автора: "Подскажите аналог GLUT, но без проблем с потоками" и "И таки как правильно потоки убивать?"

Как я понял, проблема у человека в том, что на главной нити нужно вести работу с окнами, но вся полезная прикладная работа выполняется на отдельных нитях. И нужно как-то организовать работу с отдельными рабочими нитями, их создание/удаление, а так же передачу информации от рабочих нитей главному потоку для отображения в графических окнах (и удаление окон, когда они перестают быть нужными рабочей нити).

Да, при отсутствии агентов, да еще в чистом C, все это большой и нудный трах с pthreads.

Зато при наличии агентов и специального диспетчера, который может запускать агентов, в том числе, и на главной нити, все оказывается намного, очень намного проще и удобнее. В SObjectizer-4 мы такое проделывали и на голом WinAPI, и в Qt. Получалось просто и удобно.

В SObjectizer-5 пока такой надобности не было. Но, при необходимости, диспетчер главной рабочей нити, заточенный под какой-нибудь вменяемый GUI-фреймворк вполне можно сделать.

Комментариев нет: