Пример #1
0
Pids ProcessHandleCache::Cleanup()
{
	Pids removePids;
	for (auto i = m_cache.begin(); i != m_cache.end(); ++i)
	{
		DWORD exitcode = 0;
		BOOL result = GetExitCodeProcess(i->second.get(), &exitcode);
		if (result == FALSE || exitcode != STILL_ACTIVE)
		{
			DWORD pid = i->first;
			removePids.push_back(pid);
		}
	}

	for (auto i = removePids.begin(); i != removePids.end(); ++i)
		m_cache.erase(*i);
	return removePids;
}