6225软件开发技术基础内容摘要:

息  当前状态;优先级 (priority);代码执行入口地址;程序的外存地址;运行统计信息(执行时间、页面调度);进程间同步和通信;阻塞原因  资源占用信息  虚拟地址空间的现状、打开文件列表  CPU现场保护结构  寄存器值(通用、程序计数器 PC、状态 PSW,地址包括栈指针 第 46页 /共 72页 CPU与进程管理 (4)  多个进程并发执行  同步和互斥  协调点 第 47页 /共 72页 CPU与进程管理 (5)  Windows进程的建立  函数 CreateProcess  使一个程序运行  使用 C的 spawnlp函数  使用 Win API 函数 ShellExecute  …… 第 48页 /共 72页 例、 程启动两个子进程  _spawnlp函数格式  “ ”  int _spawnlp( int mode, const char *cmdname, const char *arg0, const char *arg1, ... const char *argn, NULL )。  其中 mode表示运行方式,  Cmdname 为进程名,  arg0,… argn 为进程的若干个参数,  NULL 为终止符。  返回值:  1 Error  其他:进程返回码 第 49页 /共 72页 例 显示当前系统所有进程  PROCESSENTRY32 结构体格式 typedef struct tagPROCESSENTRY32 { DWORD dwSize。 DWORD tUsage。 DWORD th32ProcessID。 //进程编号 DWORD th32DefaultHeapID。 DWORD th32ModuleID。 DWORD tThreads。 DWORD th32ParentProcessID。 LONG pcPriClassBase。 DWORD dwFlags。 char szExeFile[MAX_PATH]。 //进程执行文件名 } PROCESSENTRY32。 第 50页 /共 72页 创建进程  在 Windows中,启动一个程序时, Windows通过函数 CreateProcess建立一个进程,当程序结束时,通过 TerminateProcess函数推出程序执行。 第 51页 /共 72页 例 31 启动两个子进程  解题思路:  使用 “ ”中的 CreateProcess函数创建进程。  步骤: 打开 VC++ 新键工程类型为 “ Win32 Application” 添加 C++源程序 第 52页 /共 72页 CreateProcess函数的格式 BOOL CreateProcess( LPCTSTR lpApplicationName, //名称 LPTSTR lpCommandLine, //命令 LPSECURITY_ATTRIBUTES lpProcessAttributes, //进程安全属性 LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性 BOOL bInheritHandles, //句柄继承标志 DWORD dwCreationFlags, //创建标志 LPVOID lpEnvironment, //环境块指针 LPCTSTR lpCurrentDirectory, //当前目录指针 LPSTARTUPINFO lpStartupInfo, //SARTUPINFO 指针 LPPROCESS_INFORMATION lpProcessInformation //PROCESSINFORMATION 指针 )。 第 53页 /共 72页 举例 include include void child_process(char mand[]) { BOOL bSuccess。 PROCESS_INFORMATION piProcInfo。 //保存创建的进程信息 STARTUPINFO Info。 //定义进程的窗口特征参数 =sizeof(STARTUPINFO)。 //定义结构体的字节大小 =NULL。 //无进程桌面 =NULL。 //无进程窗口 =0。 //保留,必须是 0 bSuccess= //创建进程 CreateProcess(NULL,mand,NULL,NULL,FALSE,NULL,NULL,NULL,amp。 Info,amp。 piProcInfo)。 if(!bSuccess) cout错误命令 endl。 else coutmand进程创建成功 ,进程号是 :endl。 } 第 54页 /共 72页 主函数 void main() { cout父进程启动 endl。 child_process(osk)。 child_process(mplay32)。 cout父进程退出 endl。 } 举例 第 55页 /共 72页 线程及其应用  线程的概念  指令序列  程序运行的基本单位,不过它是作为 CPU调度单位,它只拥有必不可少的资源  线程的优点  减小并发执行的时间和空间开销  线程的状态  就绪、阻塞(等待)和执行 第 56页 /共 72页 线程及其应用 (2)  线程与进程的区别  线程是比进程更小的单位,从运行角度来讲,同类线程的数据和代码区是共享的,这有利于线程的快速调度和切换,而进程之间的数据和代码区是独立的。 第 57页 /共 72页 Windows操作系统下的线程状态转换 第 58页 /共 72页 程序算法 1. 定义 PROCESS_INFORMATION 结构体以保存创建的进程信息。 2. 定义 STARTUPINFO结构体,填入进程的窗口特征参数。 3. 调用函数 CreateProcess创建指定进程。 4. 创建成功显示进程号,否则显示出错信息。 第 59页 /共 72页 源程序 include include void child_process(char mand[]){ BOOL bSuccess。 PROCESS_INFORMATION piProcInfo。 //保存创建的进程信息 STARTUPINFO Info。 //定义进程的窗口特征参数 = sizeof(STARTUPINFO)。 //定义结构体的字节大小 = NULL。 //无进程桌面 = NULL。 //无进程窗口 = 0。 //保留,必须是 0 bSuccess=CreateProcess(NULL,mand,NULL,NULL,FALSE, NULL,NULL,NULL,amp。 Info,amp。 piProcInfo)。 //创建进程 if (!bSuccess) cout错误命令 endl。 else coutmand进程创建成功 ,进程号是 :endl。 } void main() { cout父进程启动 endl。 child_process(osk)。 child_process(mplay32)。 cout父进程退出 endl。 } 例 31源程序 例 31执行程序 第 60页 /共 72页 例 32显示当前系统中所有进程  本程序中使用“ ”中的CreateToolhelp32Snapshot函数取得操作系统当前的所有进程描述表的一个备份。 该函数格式为: HANDLE WINAPI CreateToolhelp32Snapshot(。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。