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

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.2. Управление работой RDS и функции общего назначения

А.5.2.18. rdsExecuteCommand – выполнить общесистемную команду

# Приложения

## Приложение А. Функции, константы и структуры RDS

### А.5. Сервисные функции и макросы RDS

#### А.5.2. Управление работой RDS и функции общего назначения

##### А.5.2.18. rdsExecuteCommand – выполнить общесистемную команду

Функция rdsExecuteCommand ставит команду, указанную в ее параметрах, в очередь на исполнение.

      void RDSCALL rdsExecuteCommandA(
        int Command,     // Команда RDS_SYSCMD_*
        DWORD Flags,     // Флаги
        RDSCSTR Param1,  // Первый параметр команды (UTF8)
        RDSCSTR Param2   // Второй параметр команды (UTF8)
      );
      void RDSCALL rdsExecuteCommandW(
        int Command,     // Команда RDS_SYSCMD_*
        DWORD Flags,     // Флаги
        RDSWCSTR Param1, // Первый параметр команды (UTF16)
        RDSWCSTR Param2  // Второй параметр команды (UTF16)
      );
      // Функция-псевдоним
      void RDSCALL rdsExecuteCommand(
        int Command,     // Команда RDS_SYSCMD_*
        DWORD Flags,     // Флаги
        RDSXCSTR Param1, // Первый параметр команды (кодировка по умолчанию)
        RDSXCSTR Param2  // Второй параметр команды (кодировка по умолчанию)
      );

Тип указателя на эту функцию

RDS_VIDwSS (для UTF8) или RDS_VIDwWsWs (для UTF16)

Параметры

Command(int)
  Одна из констант RDS_SYSCMD_* (см. ниже), указывающая на исполняемую RDS команду.
Flags(DWORD)
  Битовые флаги команды (зависят от значения Command).
Param1(RDSCSTR,RDSWCSTR,RDSXCSTR)
  Указатель на строку с первым параметром команды (зависит от значения Command).
Param2(RDSCSTR,RDSWCSTR,RDSXCSTR)
  Указатель на строку со вторым параметром команды (зависит от значения Command).

Примечания

RDS поддерживает очередь команд, относящихся ко всей загруженной схеме и выполняемых строго последовательно. Если вызов rdsExecuteCommand, поставивший в очередь команду А, предшествует вызову, поставившему в очередь команду Б, команда Б не начнет выполняться до тех пор, пока не завершится выполнение команды А. Таким образом можно, например, скомандовать RDS сохранить текущую загруженную схему, а затем загрузить новую: загрузка новой не начнется, пока не будет сохранена старая.

Выполняемая команда задается в параметре Command одной из следующих констант:

Command | Команда и ее параметры
--- | ---
RDS_SYSCMD_STARTCALC | Запустить расчет. Параметры Flags, Param1 и Param2 не используются.
RDS_SYSCMD_LOADFILE | Загрузить схему из файла. Параметр Flags не используется. В параметре Param1 передается указатель на строку, содержащую полный путь к файлу схемы. В параметре Param2 передается либо указатель на строку, имитирующую дополнительные параметры командной строки RDS, которые могут быть разобраны блоками загруженной схемы, либо NULL.
RDS_SYSCMD_SAVEFILE | Сохранить схему в файл. Параметры Flags и Param2 не используются. В параметре Param1 передается указатель на строку, содержащую полный путь к файлу схемы.
RDS_SYSCMD_LOADTEMPLATE | Загрузить шаблон схемы из файла. Параметры Flags, Param1 и Param2 используются так же, как в команде RDS_SYSCMD_LOADFILE.
RDS_SYSCMD_MESSAGEBOX | Вывести сообщение пользователю. В параметре Flags передаются флаги сообщения, аналогичные функции Windows API MessageBox и сервисной функции RDS rdsMessageBox. В параметре Param1 передается указатель на строку с текстом сообщения. В параметре Param2 передается указатель на строку с заголовком окна сообщения. Этот вызов отличается от rdsMessageBox только тем, что он не выводит сообщение пользователю немедленно, а ставит его в очередь.
RDS_SYSCMD_EDITMODE | Переводит RDS в режим редактирования. Параметры Flags, Param1 и Param2 не используются.
RDS_SYSCMD_CALCMODE | Переводит RDS в режим моделирования. Параметры Flags, Param1 и Param2 не используются.
RDS_SYSCMD_RESETCALC | Сбрасывает расчет во всей схеме. Параметры Flags, Param1 и Param2 не используются.
RDS_SYSCMD_DELAYEDBLOCKCALL | Вызывает модель одного из блоков загруженной схемы в главном потоке для реакции на событие RDS_BFM_DELAYEDCALLCOMMAND. В параметре Param1 передается указатель на строку с полным именем вызываемого блока. Значение параметра Flags и строка, указатель на которую передан в параметре Param2, без изменения передаются в реакцию на событие RDS_BFM_DELAYEDCALLCOMMAND.

Следует помнить, что при загрузке новой схемы очередь команд очищается, поэтому все команды, поставленные в очередь после RDS_SYSCMD_LOADFILE и RDS_SYSCMD_LOADTEMPLATE будут проигнорированы. Например, последовательность

      rdsExecuteCommand(RDS_SYSCMD_LOADFILE,0,"c:\\rds\\Scheme.rds",NULL);
      rdsExecuteCommand(RDS_SYSCMD_STARTCALC,0,NULL,NULL);

не приведет к запуску расчета после загрузки новой схемы: сразу после загрузки очередь команд будет очищена, и команда RDS_SYSCMD_STARTCALC не будет воспринята RDS.

Технически, вызов rdsExecuteCommand приводит к помещению команды и ее параметров в очередь сообщений Windows, обрабатываемых RDS, поэтому команды не будут выполняться до тех пор, пока RDS в очередной раз не войдет в цикл обработки сообщений. Если, например, модель какого-нибудь блока организует длительный цикл в главном потоке, команды не будут выполняться до завершения этого цикла.

См. также

Сервисные функции со строковыми параметрами и результатом, RDS_BFM_DELAYEDCALLCOMMAND, rdsEnableCommandQueue, rdsStartCalc, rdsStopCalc, rdsResetSystemState, rdsMessageBox.