Вы не можете сбросить его. Но вы можете использовать CreateProcess
для каждого вызова функции. В качестве примера возьмем 3 функции:
getpeak.exe:
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
int getPeak()
{
HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)))
{
return pmc.PeakWorkingSetSize;
}
return 0;
}
void functionCall1()
{
//To Do
}
void functionCall2()
{
//To Do
}
void functionCall3()
{
//To Do
}
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("format: \"getpeak.exe index\"\n");
}
int peak = getPeak();
switch (atoi(argv[1]))
{
case 1:
functionCall1();
break;
case 2:
functionCall2();
break;
case 3:
functionCall3();
break;
default:
printf("Invaild function index\n");
break;
}
int d = getPeak() - peak;
return d;
}
Вызов CreateProcess
для каждого вызова функции, например:
#include <Windows.h>
#include <iostream>
int main()
{
DWORD d1 = 0, d2 = 0, d3 = 0;
TCHAR cmd[3][20] = {"getpeak.exe 1","getpeak.exe 2","getpeak.exe 3"};
STARTUPINFO si = { 0 };
si.cb = sizeof(STARTUPINFO);
PROCESS_INFORMATION pi = { 0 };
if (CreateProcess(NULL, cmd[0], NULL, NULL, false, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &d3);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
if (CreateProcess(NULL, cmd[1], NULL, NULL, false, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &d2);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
if (CreateProcess(NULL, cmd[2], NULL, NULL, false, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &d3);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
}
(Удалить часть ошибки проверка)