Текущий раздел:

Описания RDS

Руководство программиста

Глава 2. Создание моделей блоков

§2.14. Программное управление расчетом

§2.14.1. Запуск и остановка расчета

Полный исходный текст на языке C++ для библиотеки (DLL) с моделью блока, запускающего и останавливающего расчет по нажатию кнопки мыши, а также останавливающего расчет при поступлении сингала на вход блока.

      // Запуск и остановка расчета
      #include <windows.h>
      #include <RdsDef.h>
      // Подготовка описаний сервисных функций
      #define RDS_SERV_FUNC_BODY GetInterfaceFunctions
      #include <RdsFunc.h>

      //========== Главная функция DLL ==========
      int WINAPI DllMain(HINSTANCE /*hinst*/,
                               unsigned long reason,
                               void* /*lpReserved*/)
      { if(reason==DLL_PROCESS_ATTACH) // Загрузка DLL
          { // Получение доступа к функциям RDS
            if(!GetInterfaceFunctions())
              RDS_SERV_ERROR_MSGW // Сообщение: старая версия RDS
          }
        return 1;
      }
      //========= Конец главной функции =========

      // Блок, запускающий и останавливающий расчет
      extern "C" __declspec(dllexport)
        int RDSCALL StopCalc(int CallMode,
            RDS_PBLOCKDATA BlockData,
            LPVOID ExtParam)
      { switch(CallMode)
          { case RDS_BFM_MODEL: // Один такт расчета
              rdsStopCalc();
              break;
            case RDS_BFM_MOUSEDOWN: // Нажатие кнопки мыши
            case RDS_BFM_SETUP: // Вызов функции настройки
              if(rdsCalcProcessIsRunning()) // Расчет сейчас запущен
                rdsStopCalc();
              else // Расчет сейчас остановлен
                rdsStartCalc();
              break;
          }
        return RDS_BFR_DONE;
      }
      //=========================================