龙湖地产别墅北京:进程的创建

来源:百度文库 编辑:中财网 时间:2024/04/29 18:23:02
在 Windows 环境下,进程就是一个正在运行的程序实例.线程是进程内执行代码的独立实体.创建一个进程后,系统会为该进程创建一个主线程.通常通过调用 CreateProcess 函数创建进程,该函数原形如下: BOOL CreateProcess(LPCSTR lpApplicationName, //可执行文件的名称LPSTR lpCommandLine, //指定了要传递给执行模块的参数NULL,//进程安全性,设为 NULL 表示使用默认安全属性LPSECURITY_ATTRIBUTES lpProcessAttributes,//线程安全性,设为 NULL 表示使用默认安全属性LPSECURITY_ATTRIBUTES lpThreadAttributes//指定当前进程的可继承句柄是否可以被新进程继承BOOL bInheritHandle,//指定了新进程的优先级和其它创建标志DWORD dwCreationFlags,LPVOID lpEnvironment,//指定了新进程使用的环境变量LPCSTR lpCurrenDirectory,//新进程使用的目录LPSTARUPINFO lpStartupinfo, //指定新进程的显示信息//返回新建进程的标志信息,如ID 号,句柄等LPPROCESS_INFORMATION lpProcessInformation) 上面的参数的数据类型是 Windows 自定义的数据类型,具体定义在 WINDEF.h文件中,下面列出一部分常用的数据类型typedef unsigned long   DWORD;typedef int           BOOL;typedef unsigned char   BYTE;typedef unsigned short WORDtypedef float          FLOAT;typedef void far      *LPVOID;typedef int           INT;typedef unsigned int    UINT; lpProcessInformation 参数是一个指向 PROCESS_INFORMATION 结构的指针,CreateProcess 函数返回之前会初始化这些结构成员,结构定义如下:typedef struct{       HANDLE hProcess;   //新建进程的内核句柄       HANDLE hThread;   //新建进程中主线程的内核句柄       DWORD dwProcessId;   //新建进程的ID 号       DOWRD dwThreaId;    //新建进程的主线程ID 号}  创建进程以后,必须调用 CloseHandle 函数关闭所创建的进程内核对象和线程内核对象,否则进程虽然终止了,但是该进程占用的资源依然没有释放 完整示例代码如下(该程序运行的时候会自动打开系统自带的记事本程序): #include   int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){    char *szCommandLine = "notepad.exe";    STARTUPINFO si = {sizeof(si)}; //初始化STARTUPINFO 结构的大小    PROCESS_INFORMATION pi; //该变量保存新建进程的标志信息    BOOL bRet = ::CreateProcess(NULL, //不在此指定可执行的文件名                                szCommandLine, //命令行参数                                NULL, //默认进程安全属性                                NULL, //默认线程安全属性                                FALSE, //指定当前进程内的句柄不可以被新进程继承                                NULL,   //使用默认的创建方式                                NULL,   //使用本进程的环境变量                                NULL,   //使用本进程的目录                                &si,    //使用默认的显示方式                                &pi); //保存新建进程的标志信息    if(bRet)          //关闭新建进程和主线程的句柄        ::CloseHandle(pi.hProcess);        ::CloseHandle(pi.hThread);      return 0;}