Re[4]: Асинхронщина
От: Videoman Россия https://hts.tv/
Дата: 06.12.25 11:54
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Можно использовать структуру/класс для хранения состояния. Но тут кстати RAII немного мешает поэтому лучше использовать аналог defer. То есть за ресурсы отвечает не исполнитель, а тот кто выдаёт задаиние исполнителю. В таком случае ресурсы можно контролировать (например ограничивать сверху).

_>
_>struct Fn1 {
_>  int line;
_>  int i,j,k;

_>  int setup(int sev);
_>  int loop();

_>  static Fn1* my(void* ctx) { return (Fn1*)ctx; }
_>  static int _setup(void *ctx,int sev) { return my(ctx)->setup(sev); }
_>  static int _loop(void *ctx) { return my(ctx)->loop(); }
_>};

_>int Fn1::loop() {
_>   LOOP_BEGIN(line)
_>   for(i=1;i<10;i++) {
_>     // ...
_>     LOOP_POINT
_>     // ...
_>   }
_>   LOOP_END()
_>}

_>...
_>   Fn1 fn1[1];
_>   Fn1::_setup(fn1,sev_Init);
_>   while( Fn1::_loop(fn1) ) {}
_>   Fn1::_setup(fn1,sev_Done);
_>

_>Или если больше нравиться можно использовать виртуальные методы, определив общий интерфейс.
_>
_>struct AFn {
_>  virtual int setup(int)=0;
_>  virtual int loop()=0;
_>};
_>

_>Но с функциями гибкость на порядок выше, особенно при использовании внешних динамических библиотек.

Понял, спасибо. Но у тебя скорее С-шный подход. Всё состояние руками управляется. Такое понятно как сделать, но есть надежда, что можно автоматизировать как-то.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.