Windows编程之进程
现在的Windows操作系统实行的是抢占式多任务的调度方式,意思是操作系统在执行多任务的时候会按照优先级对任务进行排序,重要的任务先执行,但是并不会一直霸占cpu,而是在执行一段时间后操作系统会收回其运行的权利,把它排到后面,然后让其他的任务进行执行,每次执行的任务的时间其实是特别少的,那么对于任务来说,相当于同时在执行所有的任务。
进程这一部分,我们的代码展示了如果获取系统的进程列表,以及删除进程。
代码之进程
1 | #include <stdio.h> |
简单的分析一下这段代码,首先在写获取进程的代码之前要#include <TlHelp32.h>
,在main函数中,首先利用CreateToolhelp32Snapshot函数来获取进程快照的句柄,该函数的第一个参数是获取进程的类型,我们选择TH32CS_SNAPPROCESS,来获取进程,第二个参数为0,代表获取系统的所有进程。
之后声明一个PROCESSENTRY32结构变量,该变量用于存取获取的进程的各种信息。
利用Process32First函数来取得第一个进程,之后用while循环配合Process32Next函数来获取所有的进程。我们用到的PROCESSENTRY32结构体中的szExeFile是进程的文件名,th32ProcessID是进程的pid。
在之后我们判断进程名是否是SogouCloud.exe来获取其pid,最后利用OpenProcess打开进程获取句柄,配合TerminateProcess函数结束进程。
Windows编程之多线程
对于多线程,没啥好说的,主要是说一下代码中将要出现的临界区。在多线程中的有一个临界区的概念,意思是同一时间内,只能有一个线程访问临界区的资源,这样能够防止对于一个文件来说,多个线程同时修改的的问题。
代码之线程
1 | #include <Windows.h> |
代码中的临界区的实现需要先定义一个全局的CRITICAL_SECTION结构变量。然后是InitializeCriticalSection -> EnterCriticalSection -> LeaveCriticalSection -> DeleteCriticalSection。
还有就是在定义线程函数的时候统一的格式DWORD WINAPI 函数名(LPVOID 参数)