Re: сопрограммы
От: enji  
Дата: 16.03.12 05:49
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>есть ли примеры удачного применения из реальной жизни ?

J>интересно было бы посмотреть или хотя бы интересные мысли..
J>по удачному применению услышать

Я пишу в том числе для железок, в которых не хватает ресурсов для полноценных потоков, а многозадачность нужна. Использую сопрограммы (реализация своя собственная). Выглядит примерно так (это часть драйвера, управляющего сторонним оборудованием):

CL_line(SomeDriver::lineInit, LINE_INIT) // специальным образом оформленная функция
  
  enum { AfterCalcInit = STEP_USER, WaitClosed, CloseAll, ProductInit };

  CL_step0 
      if (calculatorInitDone())
        return AfterCalcInit;

      sendSomeCommand();
            
  CL_stepN(CloseAll)      // здесь происходит выход из функции и отправка данных устройству
      startCycle();       // После получения и обработки ответа вернемся сюда
      sendSomeCommand2();
  CL_step
      sendSomeCommand3();
  CL_step                 
      if (nextCycle())  
          return CloseAll;
      sendSomeCommand4();
  CL_step
      sendSomeCommand5();
  ...
CL_end


Когда потребовалось компилировать для десктопа, этот код без изменений заработал "внутри" boost::asio.

Использую такую реализацию уже года 2, потихоньку развиваю. Особых нареканий нет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.