Приложения
Приложение А. Функции, константы и структуры 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.