序中运行ANSYSB应用程序,这涉及到创建进程的编程,下面分别介绍它们的具体实现。
1. 注册表编程
在Windows(98/NT/2000/XP)系统上运行ANSYS安装程序后,便在Windows系统的
注册表里记录了一些信息,如初始工作路径,文件名等。利用VC平台调用ANSYS计算模块的程序必须指定ANSYS软件的运行目录以及用APDL语言开发的ANSYS模块程序路径,这样,ANSYS软件的批处理程序才能从给定的路径下读取命令流文件。在接口程序中修改这些注
册表信息,可以使用Windows提供的注册表编辑API(Application Programming Interface)函数[30,31],具体实现如下:
HKEY hSubKey; // 定义子键
LONG lRet;
char RegPath[200]="SoftWare\\ANSYS, Inc.\\ANSYS\\ANSYS 6.1\\0";
lRet=RegOpenKeyEx(HKEY_CURRENT_USER,RegPath,0,KEY_ALL_ACCESS,&;hSubKey); // 打开子键
if(lRet!=ERROR_SUCCESS)return;
lRet=RegSetValueEx(hSubKey,"Extension",0,REG_SZ,(LPBYTE)"txt",3); //设置ANSYS批处理程序读取的文件扩展名
if(lRet!=ERROR_SUCCESS)return;
lRet=RegSetValueEx(hSubKey,"Jobname",0,REG_SZ,(LPBYTE)"ZHY");
//指定ANSYS模块文件名
if(lRet!=ERROR_SUCCESS)return;
lRet=RegSetValueEx(hSubKey,"WorkingDirectory",0,REG_SZ,(LPBYTE)"E:\\LWS\\Workspace ",16);
if(lRet!=ERROR_SUCCESS)return; // 键值出错返回
RegCloseKey(hSubKey); // 关闭子键
通过以上的设置后运行ANSYS批处理程序,界面变成如图3-3所示。
从图中可看出ANSYS模块
工作路径E:\\LWS\\Workspace、初始文件名ZHY、ANSYS程序文件名ZHY.txt文件、计算结果输出文件名ZHY.out都已经自动出现在ANSYS批处理程序的输入框,往下ANSYS就可以自动从ZHY.txt读取命令流进行计算并将结果输出到ZHY.out文件中。若想改ANSYS模块路径或文件名只需对上面程序稍加修改即可。
2. 多进程编程
本文在VC平台上对ANSYS进行封装,希望前台处理系统和用户的交互,而后台进行ANSYS的计算。这就要求系统具有并发性,为此,引入多进程编程机制。进程是一个正在运行程序的实例,它具有动态性、并发性、独立性、异步性和结构性等特点。
系统中的进程动态产生与消亡,多个进程并发运行,分别执行各自对应的程序段,为各自的目标而工作。一个程序可以包含多个进程。
图3-3 ANSYS批处理运行界面
在VC++6.0中可以利用CreateProcess函数来创建一个进程去执行其他程序,而且可以设置该进程的优先级。CreateProcess函数的原型是:
BOOL CreateProcess(
LPCTSTR lpAppliciatonName
LPTSTR lpCommandLine
LPSECURITY_ATTRIBUTES lpProcessAttributes
LPSECURITY_ATTRIBUTES lpThreadAttributes
BOOL bInheritHandles
DWORD dwCreationFlags
LPVOID lpEnvironment
LPCTSTR lpCurrentDirectory
LPSTARTUPINFO lpStartupInfo
LPPROCESS_INFORMATION lpProcessInformation
);
当系统调用CreateProcess时,会创建一个进程内核对象,其初始使用计数是1。该进程内核对象不是进程本身,而是操作系统管理进程时使用的一个较小的数据结构。然后,系统为新进程创建一个虚拟地址空间,并将可执行文件或任何必要的DLL文件的代码和数据加载到该进程的地址空间中。接着,系统为新进程的主线程创建一个线程内核对象(其使用计数为1)。与进程内核对象一样,线程内核对象也是操作系统用来管理线程的小型数据结构。通过执行C/C++运行
期启动代码,该主线程便开始运行,它最终调用WinMain、wWinMain、main或wmain函数。如果系统成功创建了新进程和主线程,CreateProcess便返回True。
PszApplicationName和pszCommandLine参数分别用于设定新进程将要使用的可执行文件的名字和传递给新进程的命令