我想从 psapi 库中使用 EnumProcesses 函数查找正在运行的进程数。该函数需要一个将接收进程标识符列表的数组。它还将找到的数据的总字节数写入给定变量。我不想要进程列表,只想要他们的编号。我做了以下工作。
DWORD listSize;
DWORD a;
EnumProcesses( &a, 1000*sizeof(DWORD), &listSize ) ;
listSize/=sizeof(DWORD);
printf("%d",listSize);
这会将实际数量的进程写入 listSize,但程序在此之后停止工作。我想知道是否有办法立即将检索到的数据遗忘并获取其编号。
不可能。但是,在现代系统上,提供足够大的阵列并不是什么大问题。
我建议编写一个帮助程序函数,用一个动态大小的容器为你打包这一切,这样你就可以处理存在的进程多于原始数组可以容纳的情况:
DWORD GetNumberOfProcesses()
{
std::vector<DWORD> processes;
DWORD size = 0;
DWORD bytesReturned = 0;
while (bytesReturned == size)
{
size += 1024 * sizeof(DWORD);
processes.resize(size / sizeof(DWORD));
if (!EnumProcesses(processes.data(), size, &bytesReturned))
{
return -1;
}
}
return bytesReturned / sizeof(DWORD);
}