在 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
typedef int
typedef unsigned char
typedef unsigned short
typedef float
typedef void far
typedef int
typedef unsigned int
lpProcessInformation 参数是一个指向 PROCESS_INFORMATION 结构的指针,CreateProcess 函数返回之前会初始化这些结构成员,结构定义如下:
typedef struct
{
}
创建进程以后,必须调用 CloseHandle 函数关闭所创建的进程内核对象和线程内核对象,否则进程虽然终止了,但是该进程占用的资源依然没有释放
完整示例代码如下(该程序运行的时候会自动打开系统自带的记事本程序):
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
}
|
|